diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java index a126bfd36e..17b17b5a42 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/JavaSymbolSolver.java @@ -17,6 +17,8 @@ import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; +import java.util.function.Supplier; + /** * This implementation of the SymbolResolver wraps the functionality of the library to make them easily usable * from JavaParser nodes. @@ -91,7 +93,11 @@ public T resolveDeclaration(Node node, Class resultClass) { ConstructorDeclaration constructorDeclaration = (ConstructorDeclaration) node; TypeDeclaration typeDeclaration = (TypeDeclaration) node.getParentNode().get(); ResolvedReferenceTypeDeclaration resolvedTypeDeclaration = resolveDeclaration(typeDeclaration, ResolvedReferenceTypeDeclaration.class); - ResolvedConstructorDeclaration resolved = resolvedTypeDeclaration.getConstructors().stream().filter(c -> ((JavaParserConstructorDeclaration) c).getWrappedNode() == constructorDeclaration).findFirst().get(); + ResolvedConstructorDeclaration resolved = resolvedTypeDeclaration.getConstructors().stream() + .filter(c -> c instanceof JavaParserConstructorDeclaration) + .filter(c -> ((JavaParserConstructorDeclaration) c).getWrappedNode() == constructorDeclaration) + .findFirst() + .orElseThrow(() -> new RuntimeException("This constructor cannot be found in its parent. This seems wrong")); if (resultClass.isInstance(resolved)) { return resultClass.cast(resolved); } diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java index dfb2866493..bf28b0d1c9 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java @@ -264,6 +264,6 @@ public List getEnumConstants() { @Override public List getConstructors() { - throw new UnsupportedOperationException("To be implemented"); + return javassistTypeDeclarationAdapter.getConstructors(); } } diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/ConstructorsResolutionTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/ConstructorsResolutionTest.java index 89da1497ad..34189b0129 100644 --- a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/ConstructorsResolutionTest.java +++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/ConstructorsResolutionTest.java @@ -98,7 +98,7 @@ public void solveInnerInnerClassConstructor() { } @Test - public void solveEnumConstructor() { + public void solveEnumConstructorForJavaParserClass() { // configure symbol solver before parsing JavaParser.getStaticConfiguration().setSymbolResolver(new JavaSymbolSolver(new ReflectionTypeSolver()));