diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java index ef945a45f3..a5957afc7b 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java @@ -13,9 +13,7 @@ import com.github.javaparser.symbolsolver.javaparser.Navigator; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; -import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserConstructorDeclaration; -import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserFieldDeclaration; -import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration; +import com.github.javaparser.symbolsolver.javaparsermodel.declarations.*; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import java.util.Optional; @@ -64,8 +62,10 @@ public T resolveDeclaration(Node node, Class resultClass) { } if (node instanceof EnumConstantDeclaration) { ResolvedEnumDeclaration enumDeclaration = Navigator.findAncestor(node, EnumDeclaration.class).get().resolve().asEnum(); - // TODO look among the members - throw new UnsupportedOperationException(); + ResolvedEnumConstantDeclaration resolved = enumDeclaration.getEnumConstants().stream().filter(c -> ((JavaParserEnumConstantDeclaration)c).getWrappedNode() == node).findFirst().get(); + if (resultClass.isInstance(resolved)) { + return resultClass.cast(resolved); + } } if (node instanceof ConstructorDeclaration) { ConstructorDeclaration constructorDeclaration = (ConstructorDeclaration)node; @@ -84,10 +84,9 @@ public T resolveDeclaration(Node node, Class resultClass) { } if (node instanceof AnnotationMemberDeclaration) { ResolvedAnnotationDeclaration annotationDeclaration = Navigator.findAncestor(node, AnnotationDeclaration.class).get().resolve(); - AnnotationMemberDeclaration memberDeclaration = (AnnotationMemberDeclaration)node; - Optional resolved = annotationDeclaration.getAnnotationMembers().stream().filter(m -> m.getName().equals(memberDeclaration.getNameAsString())).findFirst(); - if (resolved.isPresent() && resultClass.isInstance(resolved.get())) { - return resultClass.cast(resolved.get()); + ResolvedAnnotationMemberDeclaration resolved = annotationDeclaration.getAnnotationMembers().stream().filter(c -> ((JavaParserAnnotationMemberDeclaration)c).getWrappedNode() == node).findFirst().get(); + if (resultClass.isInstance(resolved)) { + return resultClass.cast(resolved); } } if (node instanceof FieldDeclaration) { diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java index 9579c15207..2a603daf81 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java @@ -14,6 +14,10 @@ public class JavaParserAnnotationMemberDeclaration implements ResolvedAnnotation private com.github.javaparser.ast.body.AnnotationMemberDeclaration wrappedNode; private TypeSolver typeSolver; + public AnnotationMemberDeclaration getWrappedNode() { + return wrappedNode; + } + public JavaParserAnnotationMemberDeclaration(AnnotationMemberDeclaration wrappedNode, TypeSolver typeSolver) { this.wrappedNode = wrappedNode; this.typeSolver = typeSolver; diff --git a/java-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/JavaParserAPIIntegrationTest.java b/java-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/JavaParserAPIIntegrationTest.java index 527665a013..bbd76e05f1 100644 --- a/java-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/JavaParserAPIIntegrationTest.java +++ b/java-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/JavaParserAPIIntegrationTest.java @@ -107,16 +107,16 @@ public void enumDeclarationResolve() throws IOException { ResolvedEnumDeclaration resolvedDeclaration = declaration.resolve(); } -// @Test -// public void enumConstantDeclarationResolve() throws IOException { -// File f = adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-core/com/github/javaparser/ast/AccessSpecifier.java")); -// CompilationUnit cu = parseWithSymbolResolution(f); -// EnumDeclaration enumDeclaration = (EnumDeclaration) cu.getType(0); -// assertEquals("AccessSpecifier", enumDeclaration.getNameAsString()); -// EnumConstantDeclaration declaration = enumDeclaration.getEntry(0); -// assertEquals("PUBLIC", declaration.getNameAsString()); -// ResolvedEnumConstantDeclaration resolvedDeclaration = declaration.resolve(); -// } + @Test + public void enumConstantDeclarationResolve() throws IOException { + File f = adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-core/com/github/javaparser/ast/AccessSpecifier.java")); + CompilationUnit cu = parseWithSymbolResolution(f); + EnumDeclaration enumDeclaration = (EnumDeclaration) cu.getType(0); + assertEquals("AccessSpecifier", enumDeclaration.getNameAsString()); + EnumConstantDeclaration declaration = enumDeclaration.getEntry(0); + assertEquals("PUBLIC", declaration.getNameAsString()); + ResolvedEnumConstantDeclaration resolvedDeclaration = declaration.resolve(); + } @Test public void fieldDeclarationResolve() throws IOException {