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 1c574bb5147..de1961402bd 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 @@ -24,9 +24,9 @@ import org.eclipse.cdt.core.dom.ast.IASTNameOwner; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.dom.ast.IField; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; @@ -314,25 +314,28 @@ public class CPPASTQualifiedName extends CPPASTNameBase try { for (int i = 0; i < bindings.length; i++) { - if (bindings[i] instanceof IField) { - IField field = (IField) bindings[i]; - if (!field.isStatic()) continue; - } else if (bindings[i] instanceof ICPPMethod) { - ICPPMethod method = (ICPPMethod) bindings[i]; - if (method.isImplicit()) continue; - if (method.isDestructor() || method instanceof ICPPConstructor) { - if (!isDeclaration) continue; - } else if (!method.isStatic() && !isDeclaration) { + final IBinding binding = bindings[i]; + if (binding instanceof IField) { + IField field = (IField) binding; + if (!field.isStatic()) continue; + } else if (binding instanceof ICPPMethod) { + ICPPMethod method = (ICPPMethod) binding; + if (method.isImplicit()) + continue; + if (!isDeclaration) { + if (method.isDestructor() || method instanceof ICPPConstructor || !method.isStatic()) + continue; } - } else if (bindings[i] instanceof ICPPClassType) { - ICPPClassType type = (ICPPClassType) bindings[i]; - if (type.isSameType(classType)) continue; - } else if (!(bindings[i] instanceof IEnumerator || bindings[i] instanceof IEnumeration) || isDeclaration) { - continue; - } - - filtered.add(bindings[i]); + } else if (binding instanceof IEnumerator || binding instanceof IEnumerator) { + if (isDeclaration) + continue; + } else if (binding instanceof IType) { + IType type = (IType) binding; + if (type.isSameType(classType)) + continue; + } + filtered.add(binding); } } catch (DOMException e) { } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java index 3278015ce2e..70f8913f60b 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java @@ -252,9 +252,10 @@ public class ContentAssistTests extends BaseUITestCase { cu = importFile( "strategy.cpp", c2 ); //$NON-NLS-1$ results = getResults( cu, c2.indexOf( "::" ) + 2 ); //$NON-NLS-1$ - assertEquals( 2, results.length ); + assertEquals( 3, results.length ); assertEquals( "getAbility(void) : enum _Ability", results[1].getDisplayString() ); //$NON-NLS-1$ assertEquals( "Strategy(enum _Ability a)", results[0].getDisplayString() ); //$NON-NLS-1$ + assertEquals( "_Ability", results[2].getDisplayString() ); //$NON-NLS-1$ } public void testBug72559() throws Exception { 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 538dce1d87a..a34d19654b6 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 @@ -1187,4 +1187,16 @@ public class CompletionTests extends AbstractContentAssistTest { final String[] expected= {"var : float"}; assertCompletionResults(fCursorOffset, expected, COMPARE_DISP_STRINGS); } + + // struct X { + // typedef int TInt; + // }; + // void main() { + // X::T/*cursor*/ // content assist does not propose TInt + // } + public void testNestedTypesInQualifiedNames_Bug255898() throws Exception { + final String[] expected= {"TInt"}; + assertCompletionResults(fCursorOffset, expected, COMPARE_DISP_STRINGS); + } + } \ No newline at end of file