diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java index a1181be180f..7d26fc5f33a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java @@ -39,6 +39,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNameSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; @@ -336,6 +337,11 @@ public class CPPASTQualifiedName extends CPPASTNameBase && ((IASTUnaryExpression) getParent().getParent()).getOperator() == IASTUnaryExpression.op_amper; } + // Are we inside a using-declaration? + private boolean inUsingDecl() { + return getParent() instanceof ICPPASTUsingDeclaration; + } + private boolean canBeFieldAccess(ICPPClassType baseClass) { IASTNode parent= getParent(); if (parent instanceof IASTFieldReference) { @@ -390,7 +396,7 @@ public class CPPASTQualifiedName extends CPPASTNameBase private List filterClassScopeBindings(ICPPClassType classType, IBinding[] bindings, final boolean isDeclaration) { List filtered = new ArrayList(); - final boolean allowNonstatic = canBeFieldAccess(classType) || isAddressOf(); + final boolean allowNonstatic = canBeFieldAccess(classType) || isAddressOf() || inUsingDecl(); final IBinding templateDefinition = (classType instanceof ICPPTemplateInstance) ? ((ICPPTemplateInstance) classType).getTemplateDefinition() : null; diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java index 14fc6373c87..f72a07ab10f 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java @@ -1364,6 +1364,23 @@ public class CompletionTests extends CompletionTestBase { assertCompletionResults(fCursorOffset, expected, REPLACEMENT); } + // class Base { + // private: + // void priv(); + // protected: + // void prot(); + // public: + // void publ(); + // }; + // class Derived : Base { + // using Base::/*cursor*/ + // }; + public void testUsingDeclarationInClass_511048() throws Exception { + final String[] expected = { "prot(void)", "publ(void)" }; + assertCompletionResults(fCursorOffset, expected, ID); + } + + // template