diff --git a/javaparser-core/src/main/java/com/github/javaparser/resolution/declarations/ResolvedReferenceTypeDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/resolution/declarations/ResolvedReferenceTypeDeclaration.java
index fef3614abb..1e306489aa 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/resolution/declarations/ResolvedReferenceTypeDeclaration.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/resolution/declarations/ResolvedReferenceTypeDeclaration.java
@@ -38,7 +38,7 @@
* @author Federico Tomassetti
*/
public interface ResolvedReferenceTypeDeclaration extends ResolvedTypeDeclaration,
- ResolvedTypeParametrizable {
+ ResolvedTypeParametrizable {
@Override
default ResolvedReferenceTypeDeclaration asReferenceType() {
@@ -50,14 +50,41 @@ default ResolvedReferenceTypeDeclaration asReferenceType() {
///
/**
- * The list of all the direct ancestors of the current declaration.
- * Note that the ancestor can be parametrized types with values specified. For example:
+ * Resolves the types of all direct ancestors (i.e., the directly extended class and the directly implemented
+ * interfaces) and returns the list of ancestors as a list of resolved reference types.
+ *
+ * In case any ancestor cannot be resolved, an {@code UnsolvedSymbolException} is thrown. In order to obtain a list
+ * of only the resolvable direct ancestors, use {@link #getAncestors(boolean)} and pass the value {@code true}.
+ *
+ * Note that an ancestor can be parametrized types with values specified. For example:
*
* class A implements Comparable<String> {}
*
* In this case the ancestor is Comparable<String>
+ *
+ * @return The list of resolved ancestors.
+ * @throws UnsolvedSymbolException if some ancestor could not be resolved.
+ */
+ default List getAncestors() {
+ return getAncestors(false);
+ }
+
+ /**
+ * Resolves the types of all direct ancestors (i.e., the directly extended class and the directly implemented
+ * interfaces) and returns the list of ancestors as a list of resolved reference types.
+ *
+ * If {@code acceptIncompleteList} is {@code false}, then an {@code UnsolvedSymbolException} is thrown if any
+ * ancestor cannot be resolved. Otherwise, a list of only the resolvable direct ancestors is returned.
+ *
+ * @param acceptIncompleteList When set to {@code false}, this method throws an {@link UnsolvedSymbolException} if
+ * one or more ancestor could not be resolved. When set to {@code true}, this method
+ * does not throw an {@link UnsolvedSymbolException}, but the list of returned ancestors
+ * may be incomplete in case one or more ancestor could not be resolved.
+ * @return The list of resolved ancestors.
+ * @throws UnsolvedSymbolException if some ancestor could not be resolved and {@code acceptIncompleteList} is set to
+ * {@code false}.
*/
- List getAncestors();
+ List getAncestors(boolean acceptIncompleteList);
/**
* The list of all the ancestors of the current declaration, direct and indirect.
@@ -66,9 +93,9 @@ default ResolvedReferenceTypeDeclaration asReferenceType() {
default List getAllAncestors() {
List ancestors = new ArrayList<>();
// We want to avoid infinite recursion in case of Object having Object as ancestor
- if (!(Object.class.getCanonicalName().equals(getQualifiedName()))) {
+ if (!(Object.class.getCanonicalName().equals(getQualifiedName()))) {
for (ResolvedReferenceType ancestor : getAncestors()) {
- ancestors.add(ancestor);
+ ancestors.add(ancestor);
for (ResolvedReferenceType inheritedAncestor : ancestor.getAllAncestors()) {
if (!ancestors.contains(inheritedAncestor)) {
ancestors.add(inheritedAncestor);
@@ -139,8 +166,8 @@ default boolean hasVisibleField(String name) {
*/
default List getVisibleFields() {
return getAllFields().stream()
- .filter(f -> f.declaringType().equals(this) || f.accessSpecifier() != AccessSpecifier.PRIVATE)
- .collect(Collectors.toList());
+ .filter(f -> f.declaringType().equals(this) || f.accessSpecifier() != AccessSpecifier.PRIVATE)
+ .collect(Collectors.toList());
}
/**
@@ -162,7 +189,7 @@ default List getAllStaticFields() {
*/
default List getDeclaredFields() {
return getAllFields().stream().filter(it -> it.declaringType().getQualifiedName()
- .equals(getQualifiedName())).collect(Collectors.toList());
+ .equals(getQualifiedName())).collect(Collectors.toList());
}
///
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/JavaParserTypeDeclarationAdapter.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/JavaParserTypeDeclarationAdapter.java
index 0e8b89bfbd..85de9487ec 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/JavaParserTypeDeclarationAdapter.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/JavaParserTypeDeclarationAdapter.java
@@ -79,7 +79,7 @@ public SymbolReference solveType(String name, TypeSolve
* @return A ResolvedTypeDeclaration matching the {@param name}, null otherwise
*/
private ResolvedTypeDeclaration checkAncestorsForType(String name, ResolvedReferenceTypeDeclaration declaration) {
- for (ResolvedReferenceType ancestor : declaration.getAncestors()) {
+ for (ResolvedReferenceType ancestor : declaration.getAncestors(true)) {
try {
for (ResolvedTypeDeclaration internalTypeDeclaration : ancestor.getTypeDeclaration().internalTypes()) {
boolean visible = true;
@@ -112,7 +112,7 @@ public SymbolReference solveMethod(String name, List<
.collect(Collectors.toList());
// We want to avoid infinite recursion in case of Object having Object as ancestor
if (!Object.class.getCanonicalName().equals(typeDeclaration.getQualifiedName())) {
- for (ResolvedReferenceType ancestor : typeDeclaration.getAncestors()) {
+ for (ResolvedReferenceType ancestor : typeDeclaration.getAncestors(true)) {
// Avoid recursion on self
if (typeDeclaration != ancestor.getTypeDeclaration()) {
candidateMethods.addAll(ancestor.getAllMethodsVisibleToInheritors()
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java
index 09f2ca4a83..457fc4183e 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java
@@ -28,7 +28,7 @@ public JavaParserAnnotationDeclaration(AnnotationDeclaration wrappedNode, TypeSo
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
throw new UnsupportedOperationException();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnonymousClassDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnonymousClassDeclaration.java
index b1f4a67a69..bc48042e73 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnonymousClassDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnonymousClassDeclaration.java
@@ -95,12 +95,12 @@ public AccessSpecifier accessSpecifier() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
return
ImmutableList.
builder()
.add(getSuperClass())
- .addAll(superTypeDeclaration.asReferenceType().getAncestors())
+ .addAll(superTypeDeclaration.asReferenceType().getAncestors(acceptIncompleteList))
.build();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java
index b5f5da98af..2015ef582a 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java
@@ -269,30 +269,7 @@ public SymbolReference solveType(String name, TypeSolve
return getContext().getParent().solveType(name, typeSolver);
}
- /**
- * Resolves the type of all ancestors (i.e., the extended class and the implemented interfaces) and returns the list
- * of ancestors as a list of resolved reference types.
- *
- * @return The list of resolved ancestors.
- * @throws UnsolvedSymbolException if some ancestor could not be resolved.
- */
@Override
- public List getAncestors() {
- return getAncestors(false);
- }
-
- /**
- * Resolves the type of all ancestors (i.e., the extended class and the implemented interfaces) and returns the list
- * of ancestors as a list of resolved reference types.
- *
- * @param acceptIncompleteList When set to {@code false}, this method throws an {@link UnsolvedSymbolException} if
- * one or more ancestor could not be resolved. When set to {@code true}, this method
- * does not throw an {@link UnsolvedSymbolException}, but the list of returned ancestors
- * may be incomplete in case one or more ancestor could not be resolved.
- * @return The list of resolved ancestors.
- * @throws UnsolvedSymbolException if some ancestor could not be resolved and {@code acceptIncompleteList} is set to
- * {@code false}.
- */
public List getAncestors(boolean acceptIncompleteList) {
List ancestors = new ArrayList<>();
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java
index b0c1bf5d9b..f8a5fd6329 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java
@@ -209,7 +209,7 @@ public List getAllFields() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
List ancestors = new ArrayList<>();
ResolvedReferenceType enumClass = ReflectionFactory.typeUsageFor(Enum.class, typeSolver).asReferenceType();
ResolvedTypeParameterDeclaration eTypeParameter = enumClass.getTypeDeclaration().getTypeParameters().get(0);
@@ -218,7 +218,7 @@ public List getAncestors() {
if (wrappedNode.getImplementedTypes() != null) {
for (ClassOrInterfaceType implementedType : wrappedNode.getImplementedTypes()) {
SymbolReference implementedDeclRef = new SymbolSolver(typeSolver).solveTypeInType(this, implementedType.getName().getId());
- if (!implementedDeclRef.isSolved()) {
+ if (!implementedDeclRef.isSolved() && !acceptIncompleteList) {
throw new UnsolvedSymbolException(implementedType.getName().getId());
}
ancestors.add(new ReferenceTypeImpl((ResolvedReferenceTypeDeclaration) implementedDeclRef.getCorrespondingDeclaration(), typeSolver));
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java
index e41bbd9fe4..b22c73c018 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java
@@ -242,16 +242,30 @@ public SymbolReference solveType(String name, TypeSolve
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
List ancestors = new ArrayList<>();
if (wrappedNode.getExtendedTypes() != null) {
for (ClassOrInterfaceType extended : wrappedNode.getExtendedTypes()) {
- ancestors.add(toReferenceType(extended));
+ try {
+ ancestors.add(toReferenceType(extended));
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
+ }
}
}
if (wrappedNode.getImplementedTypes() != null) {
for (ClassOrInterfaceType implemented : wrappedNode.getImplementedTypes()) {
- ancestors.add(toReferenceType(implemented));
+ try {
+ ancestors.add(toReferenceType(implemented));
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
+ }
}
}
return ancestors;
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java
index 01f12e7fe5..c5493ba41b 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java
@@ -179,7 +179,7 @@ public List getAllFields() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
throw new UnsupportedOperationException();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java
index 185be2d5fd..4852c5fc17 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java
@@ -115,7 +115,7 @@ public List getAllFields() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
throw new UnsupportedOperationException();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistAnnotationDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistAnnotationDeclaration.java
index 4435a876e1..a0d2fd6c5c 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistAnnotationDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistAnnotationDeclaration.java
@@ -94,7 +94,7 @@ public boolean isAssignableBy(ResolvedReferenceTypeDeclaration other) {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
throw new UnsupportedOperationException();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java
index 0fb5c68c6b..0c001e0fdc 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java
@@ -168,12 +168,27 @@ private String getSuperclassFQN() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
List ancestors = new ArrayList<>();
- if (getSuperClass() != null) {
- ancestors.add(getSuperClass());
+ try {
+ ResolvedReferenceType superClass = getSuperClass();
+ if (superClass != null) {
+ ancestors.add(superClass);
+ }
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
+ }
+ try {
+ ancestors.addAll(getInterfaces());
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
}
- ancestors.addAll(getInterfaces());
return ancestors;
}
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 bf28b0d1c9..c9b504c2af 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
@@ -88,18 +88,32 @@ public String getQualifiedName() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
// Direct ancestors of an enum are java.lang.Enum and interfaces
List ancestors = new ArrayList<>();
String superClassName = ctClass.getClassFile().getSuperclass();
if (superClassName != null) {
- ancestors.add(new ReferenceTypeImpl(typeSolver.solveType(superClassName), typeSolver));
+ try {
+ ancestors.add(new ReferenceTypeImpl(typeSolver.solveType(superClassName), typeSolver));
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
+ }
}
for (String interfazeName : ctClass.getClassFile().getInterfaces()) {
- ancestors.add(new ReferenceTypeImpl(typeSolver.solveType(interfazeName), typeSolver));
+ try {
+ ancestors.add(new ReferenceTypeImpl(typeSolver.solveType(interfazeName), typeSolver));
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
+ }
}
return ancestors;
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java
index a4a9adfa87..a246765936 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java
@@ -153,12 +153,19 @@ public boolean isAssignableBy(ResolvedReferenceTypeDeclaration other) {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
List ancestors = new ArrayList<>();
try {
for (CtClass interfaze : ctClass.getInterfaces()) {
- ResolvedReferenceType superInterfaze = JavassistFactory.typeUsageFor(interfaze, typeSolver).asReferenceType();
- ancestors.add(superInterfaze);
+ try {
+ ResolvedReferenceType superInterfaze = JavassistFactory.typeUsageFor(interfaze, typeSolver).asReferenceType();
+ ancestors.add(superInterfaze);
+ } catch (UnsolvedSymbolException e) {
+ if (!acceptIncompleteList) {
+ // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully
+ throw e;
+ }
+ }
}
} catch (NotFoundException e) {
throw new RuntimeException(e);
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionAnnotationDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionAnnotationDeclaration.java
index a09fcce988..bf005403f7 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionAnnotationDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionAnnotationDeclaration.java
@@ -129,7 +129,7 @@ public List getAllFields() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
throw new UnsupportedOperationException();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java
index b11bdc2056..d6705e80c0 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java
@@ -87,7 +87,9 @@ public Set getDeclaredMethods() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
+ // we do not attempt to perform any symbol solving when analyzing ancestors in the reflection model, so we can
+ // simply ignore the boolean parameter here; an UnsolvedSymbolException cannot occur
return reflectionClassAdapter.getAncestors();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java
index f31067803d..0264ff8d90 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java
@@ -106,7 +106,9 @@ public String getQualifiedName() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
+ // we do not attempt to perform any symbol solving when analyzing ancestors in the reflection model, so we can
+ // simply ignore the boolean parameter here; an UnsolvedSymbolException cannot occur
return reflectionClassAdapter.getAncestors();
}
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java
index 41d8102b04..49201f6976 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java
@@ -240,7 +240,9 @@ public SymbolReference extends ResolvedValueDeclaration> solveSymbol(String na
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
+ // we do not attempt to perform any symbol solving when analyzing ancestors in the reflection model, so we can
+ // simply ignore the boolean parameter here; an UnsolvedSymbolException cannot occur
return reflectionClassAdapter.getAncestors();
}
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/DefaultPackageTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/DefaultPackageTest.java
index 5fcead08fd..9f24d153dd 100644
--- a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/DefaultPackageTest.java
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/DefaultPackageTest.java
@@ -54,7 +54,7 @@ public String getName() {
}
@Override
- public List getAncestors() {
+ public List getAncestors(boolean acceptIncompleteList) {
throw new UnsupportedOperationException();
}
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/MethodsResolutionTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/MethodsResolutionTest.java
index ea01bb533c..ad48b0ea60 100644
--- a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/MethodsResolutionTest.java
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/MethodsResolutionTest.java
@@ -16,6 +16,7 @@
package com.github.javaparser.symbolsolver.resolution;
+import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
@@ -27,6 +28,7 @@
import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
+import com.github.javaparser.symbolsolver.JavaSymbolSolver;
import com.github.javaparser.symbolsolver.javaparser.Navigator;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration;
@@ -448,4 +450,23 @@ public void resolveMethodCallOfMethodInMemberInterfaceWithIdenticalNameOfAnother
assertTrue(reference.isSolved());
assertEquals("X.A.bar()", reference.getCorrespondingDeclaration().getQualifiedSignature());
}
+
+ @Test
+ public void resolveLocalMethodInClassExtendingUnknownClass() {
+ // configure symbol solver before parsing
+ JavaParser.getStaticConfiguration().setSymbolResolver(new JavaSymbolSolver(new ReflectionTypeSolver()));
+
+ // parse compilation unit and get field access expression
+ CompilationUnit cu = parseSample("ClassExtendingUnknownClass");
+ ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "ClassExtendingUnknownClass");
+ MethodDeclaration method = Navigator.demandMethod(clazz, "foo");
+ MethodCallExpr methodCallExpr = method.getBody().get().getStatements().get(0).asExpressionStmt()
+ .getExpression().asMethodCallExpr();
+
+ // resolve field access expression
+ ResolvedMethodDeclaration resolvedMethodDeclaration = methodCallExpr.resolve();
+
+ // check that the expected method declaration equals the resolved method declaration
+ assertEquals("ClassExtendingUnknownClass.bar(java.lang.String)", resolvedMethodDeclaration.getQualifiedSignature());
+ }
}
diff --git a/javaparser-symbol-solver-testing/src/test/resources/ClassExtendingUnknownClass.java.txt b/javaparser-symbol-solver-testing/src/test/resources/ClassExtendingUnknownClass.java.txt
index 74107808f0..1dc2533c45 100644
--- a/javaparser-symbol-solver-testing/src/test/resources/ClassExtendingUnknownClass.java.txt
+++ b/javaparser-symbol-solver-testing/src/test/resources/ClassExtendingUnknownClass.java.txt
@@ -11,4 +11,10 @@ public class ClassExtendingUnknownClass extends UnknownClass {
public int getFoo2() {
return this.foo;
}
+
+ public void foo(String s) {
+ bar(s);
+ }
+
+ public void bar(String s) {}
}