diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeAdapter.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeAdapter.java index 4480ae19eb..a3d4c48083 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeAdapter.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeAdapter.java @@ -24,6 +24,7 @@ import java.util.*; import java.util.stream.Collectors; +import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.*; @@ -157,6 +158,7 @@ public SymbolReference solveType(String name) { public Optional containerType() { return wrappedNode .getParentNode() + .filter(parentNode -> !(parentNode instanceof CompilationUnit)) .map(node -> node.getSymbolResolver().toTypeDeclaration(node)); } diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java index 08fb1d0235..3db8f9a9af 100644 --- a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java +++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.github.javaparser.JavaParserAdapter; import com.github.javaparser.ParserConfiguration; import com.github.javaparser.StaticJavaParser; import com.github.javaparser.ast.AccessSpecifier; @@ -49,10 +50,10 @@ import com.github.javaparser.resolution.types.ResolvedPrimitiveType; import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedType; -import com.github.javaparser.symbolsolver.AbstractSymbolResolutionTest; import com.github.javaparser.symbolsolver.JavaSymbolSolver; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory; +import com.github.javaparser.symbolsolver.resolution.AbstractResolutionTest; import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver; import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver; import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver; @@ -61,7 +62,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -class JavaParserClassDeclarationTest extends AbstractSymbolResolutionTest { +class JavaParserClassDeclarationTest extends AbstractResolutionTest { private TypeSolver typeSolver; private TypeSolver typeSolverNewCode; @@ -957,7 +958,26 @@ void testHasInheritedAnnotation() throws IOException { // Set internalTypes() - // Optional containerType() + // issue #4133 + @Test + void testContainerType() { + String code = + "public class Foo {\n" + + " public static class Bar {\n" + + " public static class Baz {\n" + + " }\n" + + " }\n" + + "}\n"; + + JavaParserAdapter parser = JavaParserAdapter.of(createParserWithResolver(defaultTypeSolver())); + CompilationUnit cu = parser.parse(code); + + List declarations = cu.findAll(ClassOrInterfaceDeclaration.class); + // top level type + assertTrue(declarations.get(0).resolve().asReferenceType().containerType().isEmpty()); + assertEquals("Foo", declarations.get(1).resolve().asReferenceType().containerType().get().getQualifiedName()); + assertEquals("Foo.Bar", declarations.get(2).resolve().asReferenceType().containerType().get().getQualifiedName()); + } @Test