Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Ridge2016-12-26 03:52:05 +0000
committerNathan Ridge2017-01-03 21:28:08 +0000
commitcc59253516399d8932fb5717c28e840fb28553c4 (patch)
treef3846af000f700c44bf5b30268af604081c20030 /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom
parentb9baf5b478ba8123db821cbd4f28ed0f33f70eb0 (diff)
downloadorg.eclipse.cdt-cc59253516399d8932fb5717c28e840fb28553c4.tar.gz
org.eclipse.cdt-cc59253516399d8932fb5717c28e840fb28553c4.tar.xz
org.eclipse.cdt-cc59253516399d8932fb5717c28e840fb28553c4.zip
Bug 292236 - Consider using-declarations when determining accessibility for content assist
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java23
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java13
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java21
5 files changed, 69 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java
index a9d74762eb2..ca339a7be77 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java
@@ -43,6 +43,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
@@ -636,6 +637,11 @@ public class PDOMASTAdapter {
public ICPPClassType[] getNestedClasses() {
return ((ICPPClassType) fDelegate).getNestedClasses();
}
+
+ @Override
+ public ICPPUsingDeclaration[] getUsingDeclarations() {
+ return ((ICPPClassType) fDelegate).getUsingDeclarations();
+ }
@Override
public boolean isSameType(IType type) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java
index eecd7f27bbc..a92949ff091 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java
@@ -36,6 +36,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.parser.util.ObjectMap;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassSpecialization;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassSpecialization.RecursionResolvingBinding;
@@ -361,6 +362,28 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization
return ICPPClassType.EMPTY_CLASS_ARRAY;
}
}
+
+ @Override
+ public ICPPUsingDeclaration[] getUsingDeclarations() {
+ CCorePlugin.log(new Exception("Unsafe method call. Instantiation of dependent expressions may not work.")); //$NON-NLS-1$
+ return getUsingDeclarations(null);
+ }
+
+ @Override
+ public ICPPUsingDeclaration[] getUsingDeclarations(IASTNode point) {
+ IScope scope= getCompositeScope();
+ if (scope instanceof ICPPClassSpecializationScope) {
+ return ((ICPPClassSpecializationScope) scope).getUsingDeclarations(point);
+ }
+ try {
+ PDOMClassUtil.UsingDeclarationCollector visitor = new PDOMClassUtil.UsingDeclarationCollector();
+ PDOMCPPClassScope.acceptViaCache(this, visitor, false);
+ return visitor.getUsingDeclarations();
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return ICPPUsingDeclaration.EMPTY_USING_DECL_ARRAY;
+ }
+ }
@Override
public IBinding[] getFriends() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java
index 6eae0307abb..f2a36792d1e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java
@@ -33,6 +33,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
@@ -373,6 +374,18 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
return ICPPClassType.EMPTY_CLASS_ARRAY;
}
}
+
+ @Override
+ public ICPPUsingDeclaration[] getUsingDeclarations() {
+ try {
+ PDOMClassUtil.UsingDeclarationCollector visitor = new PDOMClassUtil.UsingDeclarationCollector();
+ PDOMCPPClassScope.acceptViaCache(this, visitor, false);
+ return visitor.getUsingDeclarations();
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return ICPPUsingDeclaration.EMPTY_USING_DECL_ARRAY;
+ }
+ }
@Override
public IBinding[] getFriends() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java
index da1b0d4487a..5c2f2da54ea 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java
@@ -32,6 +32,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
@@ -319,6 +320,11 @@ public class PDOMCPPTemplateTemplateParameter extends PDOMCPPBinding
public ICPPClassType[] getNestedClasses() {
return ICPPClassType.EMPTY_CLASS_ARRAY;
}
+
+ @Override
+ public ICPPUsingDeclaration[] getUsingDeclarations() {
+ return ICPPUsingDeclaration.EMPTY_USING_DECL_ARRAY;
+ }
@Override
public IScope getCompositeScope() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java
index 63e28480fad..7e32cfe75b3 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java
@@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
import org.eclipse.core.runtime.CoreException;
@@ -136,4 +137,24 @@ class PDOMClassUtil {
return nestedClasses.toArray(new ICPPClassType[nestedClasses.size()]);
}
}
+
+ static class UsingDeclarationCollector implements IPDOMVisitor {
+ private final List<ICPPUsingDeclaration> usingDeclarations = new ArrayList<>();
+
+ @Override
+ public boolean visit(IPDOMNode node) throws CoreException {
+ if (node instanceof ICPPUsingDeclaration) {
+ usingDeclarations.add((ICPPUsingDeclaration) node);
+ }
+ return false;
+ }
+
+ @Override
+ public void leave(IPDOMNode node) throws CoreException {
+ }
+
+ public ICPPUsingDeclaration[] getUsingDeclarations() {
+ return usingDeclarations.toArray(new ICPPUsingDeclaration[usingDeclarations.size()]);
+ }
+ }
}

Back to the top