diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java index 7fb3a701ed3..b994fcb6956 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java @@ -2654,4 +2654,16 @@ public class CompleteParser2Tests extends TestCase { assertInstances(col, bar, 1); } + + public void test173874_nestedClasses() throws Exception { + String code = "class aClass { class bClass; int x; };"; + IASTTranslationUnit tu = parse(code, true, ParserLanguage.CPP, true); + + CPPNameCollector col = new CPPNameCollector(); + tu.accept(col); + + ICPPClassType cls = (ICPPClassType)col.getName(0).resolveBinding(); + ICPPClassType[] nested = cls.getNestedClasses(); + assertEquals(1, nested.length); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java index 4288fed6e10..336dba04460 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java @@ -793,7 +793,7 @@ public class CPPClassType extends PlatformObject implements ICPPClassType, ICPPI return new ICPPClassType[] { new CPPClassTypeProblem( node, IProblemBinding.SEMANTIC_DEFINITION_NOT_FOUND, getNameCharArray() ) }; } } - IBinding binding = null; + ICPPClassType [] result = null; IASTDeclaration [] decls = getCompositeTypeSpecifier().getMembers(); @@ -801,12 +801,13 @@ public class CPPClassType extends PlatformObject implements ICPPClassType, ICPPI IASTDeclaration decl = decls[i]; while( decl instanceof ICPPASTTemplateDeclaration ) decl = ((ICPPASTTemplateDeclaration)decl).getDeclaration(); - if( decls[i] instanceof IASTSimpleDeclaration ){ - IASTDeclSpecifier declSpec = ((IASTSimpleDeclaration) decls[i]).getDeclSpecifier(); + if( decl instanceof IASTSimpleDeclaration ){ + IBinding binding = null; + IASTDeclSpecifier declSpec = ((IASTSimpleDeclaration) decl).getDeclSpecifier(); if( declSpec instanceof ICPPASTCompositeTypeSpecifier ){ binding = ((ICPPASTCompositeTypeSpecifier)declSpec).getName().resolveBinding(); } else if( declSpec instanceof ICPPASTElaboratedTypeSpecifier && - ((IASTSimpleDeclaration)decls[i]).getDeclarators().length == 0 ) + ((IASTSimpleDeclaration)decl).getDeclarators().length == 0 ) { binding = ((ICPPASTElaboratedTypeSpecifier)declSpec).getName().resolveBinding(); }