Skip to content

Commit

Permalink
Generalized method usage resolution API. Removed typesolver parameter…
Browse files Browse the repository at this point in the history
… from a couple of method calls.
  • Loading branch information
Johann Beleites committed Nov 27, 2018
1 parent b5b486a commit 06d7e13
Show file tree
Hide file tree
Showing 16 changed files with 82 additions and 71 deletions.
@@ -0,0 +1,12 @@
package com.github.javaparser.symbolsolver.core.resolution;

import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.types.ResolvedType;

import java.util.List;
import java.util.Optional;

public interface MethodUsageResolutionCapability {
Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> argumentTypes, Context invocationContext,
List<ResolvedType> typeParameters);
}
Expand Up @@ -20,17 +20,7 @@
import com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration; import com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration; import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserInterfaceDeclaration;
import com.github.javaparser.symbolsolver.javassistmodel.JavassistClassDeclaration;
import com.github.javaparser.symbolsolver.javassistmodel.JavassistEnumDeclaration;
import com.github.javaparser.symbolsolver.javassistmodel.JavassistInterfaceDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionClassDeclaration;
import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionEnumDeclaration;
import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionInterfaceDeclaration;


import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
Expand All @@ -45,30 +35,14 @@ private ContextHelper() {
} }


public static Optional<MethodUsage> solveMethodAsUsage(ResolvedTypeDeclaration typeDeclaration, String name, public static Optional<MethodUsage> solveMethodAsUsage(ResolvedTypeDeclaration typeDeclaration, String name,
List<ResolvedType> argumentsTypes, TypeSolver typeSolver, List<ResolvedType> argumentsTypes, Context invokationContext,
Context invokationContext, List<ResolvedType> typeParameters) { List<ResolvedType> typeParameters) {
if (typeDeclaration instanceof JavassistClassDeclaration) {
return ((JavassistClassDeclaration) typeDeclaration).solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters); if (typeDeclaration instanceof MethodUsageResolutionCapability) {
} else if (typeDeclaration instanceof JavassistInterfaceDeclaration) { return ((MethodUsageResolutionCapability) typeDeclaration)
return ((JavassistInterfaceDeclaration) typeDeclaration).solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters); .solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters);
} else if (typeDeclaration instanceof JavassistEnumDeclaration) { } else {
return ((JavassistEnumDeclaration) typeDeclaration).solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters); throw new UnsupportedOperationException(typeDeclaration.toString());
} else if (typeDeclaration instanceof ReflectionClassDeclaration) {
return ((ReflectionClassDeclaration) typeDeclaration).solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters);
} else if (typeDeclaration instanceof ReflectionInterfaceDeclaration) {
return ((ReflectionInterfaceDeclaration) typeDeclaration).solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters);
} else if (typeDeclaration instanceof ReflectionEnumDeclaration) {
return ((ReflectionEnumDeclaration) typeDeclaration).solveMethodAsUsage(name, argumentsTypes, invokationContext, typeParameters);
} else if (typeDeclaration instanceof JavaParserClassDeclaration) {
return ((JavaParserClassDeclaration) typeDeclaration).getContext().solveMethodAsUsage(name, argumentsTypes);
} else if (typeDeclaration instanceof JavaParserInterfaceDeclaration) {
return ((JavaParserInterfaceDeclaration) typeDeclaration).getContext().solveMethodAsUsage(name, argumentsTypes);
} else if (typeDeclaration instanceof JavaParserEnumDeclaration) {
return ((JavaParserEnumDeclaration) typeDeclaration).getContext().solveMethodAsUsage(name, argumentsTypes);
} else if (typeDeclaration instanceof JavaParserAnonymousClassDeclaration) {
return ((JavaParserAnonymousClassDeclaration) typeDeclaration).getContext().solveMethodAsUsage(name, argumentsTypes);
} }
throw new UnsupportedOperationException(typeDeclaration.toString());
} }

} }
Expand Up @@ -166,7 +166,7 @@ public SymbolReference<ResolvedMethodDeclaration> solveMethod(String name, List<
private Optional<MethodUsage> solveMethodAsUsage(ResolvedReferenceType refType, String name, private Optional<MethodUsage> solveMethodAsUsage(ResolvedReferenceType refType, String name,
List<ResolvedType> argumentsTypes, List<ResolvedType> argumentsTypes,
Context invokationContext) { Context invokationContext) {
Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(refType.getTypeDeclaration(), name, argumentsTypes, typeSolver, invokationContext, refType.typeParametersValues()); Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(refType.getTypeDeclaration(), name, argumentsTypes, invokationContext, refType.typeParametersValues());
if (ref.isPresent()) { if (ref.isPresent()) {
MethodUsage methodUsage = ref.get(); MethodUsage methodUsage = ref.get();


Expand Down
Expand Up @@ -4,10 +4,12 @@
import com.github.javaparser.ast.Node; import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.AnnotationDeclaration; import com.github.javaparser.ast.body.AnnotationDeclaration;
import com.github.javaparser.ast.expr.ObjectCreationExpr; import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.declarations.*; import com.github.javaparser.resolution.declarations.*;
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration;
Expand All @@ -23,7 +25,8 @@
/** /**
* An anonymous class declaration representation. * An anonymous class declaration representation.
*/ */
public class JavaParserAnonymousClassDeclaration extends AbstractClassDeclaration { public class JavaParserAnonymousClassDeclaration extends AbstractClassDeclaration
implements MethodUsageResolutionCapability {


private final TypeSolver typeSolver; private final TypeSolver typeSolver;
private final ObjectCreationExpr wrappedNode; private final ObjectCreationExpr wrappedNode;
Expand Down Expand Up @@ -68,6 +71,12 @@ public SymbolReference<ResolvedMethodDeclaration> solveMethod(String name, List<
return getContext().solveMethod(name, argumentsTypes, staticOnly); return getContext().solveMethod(name, argumentsTypes, staticOnly);
} }


@Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> argumentTypes,
Context invocationContext, List<ResolvedType> typeParameters) {
return getContext().solveMethodAsUsage(name, argumentTypes);
}

@Override @Override
protected ResolvedReferenceType object() { protected ResolvedReferenceType object() {
return new ReferenceTypeImpl(typeSolver.solveType(Object.class.getCanonicalName()), typeSolver); return new ReferenceTypeImpl(typeSolver.solveType(Object.class.getCanonicalName()), typeSolver);
Expand Down
Expand Up @@ -20,11 +20,13 @@
import com.github.javaparser.ast.Node; import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.*; import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.UnsolvedSymbolException; import com.github.javaparser.resolution.UnsolvedSymbolException;
import com.github.javaparser.resolution.declarations.*; import com.github.javaparser.resolution.declarations.*;
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration;
Expand All @@ -40,7 +42,7 @@
/** /**
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class JavaParserClassDeclaration extends AbstractClassDeclaration { public class JavaParserClassDeclaration extends AbstractClassDeclaration implements MethodUsageResolutionCapability {


/// ///
/// Fields /// Fields
Expand Down Expand Up @@ -142,6 +144,12 @@ public SymbolReference<ResolvedMethodDeclaration> solveMethod(String name, List<
return ctx.solveMethod(name, parameterTypes, false); return ctx.solveMethod(name, parameterTypes, false);
} }


@Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> argumentTypes,
Context invocationContext, List<ResolvedType> typeParameters) {
return getContext().solveMethodAsUsage(name, argumentTypes);
}

/** /**
* This method is deprecated because the context is an implementation detail that should not be exposed. * This method is deprecated because the context is an implementation detail that should not be exposed.
* Ideally this method should become private. For this reason all further usages of this method are discouraged. * Ideally this method should become private. For this reason all further usages of this method are discouraged.
Expand Down
Expand Up @@ -30,10 +30,11 @@
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.resolution.types.parametrization.ResolvedTypeParametersMap; import com.github.javaparser.resolution.types.parametrization.ResolvedTypeParametersMap;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration;
import com.github.javaparser.symbolsolver.logic.TypeDeclarationWithResolutionCapabilities; import com.github.javaparser.symbolsolver.logic.MethodResolutionCapability;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl; import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl;
Expand All @@ -48,7 +49,7 @@
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class JavaParserEnumDeclaration extends AbstractTypeDeclaration public class JavaParserEnumDeclaration extends AbstractTypeDeclaration
implements ResolvedEnumDeclaration, TypeDeclarationWithResolutionCapabilities { implements ResolvedEnumDeclaration, MethodResolutionCapability, MethodUsageResolutionCapability {


private TypeSolver typeSolver; private TypeSolver typeSolver;
private com.github.javaparser.ast.body.EnumDeclaration wrappedNode; private com.github.javaparser.ast.body.EnumDeclaration wrappedNode;
Expand Down Expand Up @@ -187,14 +188,10 @@ public int hashCode() {
return wrappedNode.hashCode(); return wrappedNode.hashCode();
} }


@Deprecated @Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> parameterTypes, public Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> argumentTypes,
Context invokationContext, List<ResolvedType> typeParameterValues) { Context invokationContext, List<ResolvedType> typeParameters) {
if (name.equals("values") && parameterTypes.isEmpty()) { return getContext().solveMethodAsUsage(name, argumentTypes);
return Optional.of(new ValuesMethod(this, typeSolver).getUsage(null));
}
// TODO add methods inherited from Enum
return getContext().solveMethodAsUsage(name, parameterTypes);
} }


@Override @Override
Expand Down
Expand Up @@ -21,15 +21,17 @@
import com.github.javaparser.ast.body.BodyDeclaration; import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.UnsolvedSymbolException; import com.github.javaparser.resolution.UnsolvedSymbolException;
import com.github.javaparser.resolution.declarations.*; import com.github.javaparser.resolution.declarations.*;
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration;
import com.github.javaparser.symbolsolver.logic.TypeDeclarationWithResolutionCapabilities; import com.github.javaparser.symbolsolver.logic.MethodResolutionCapability;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.LazyType; import com.github.javaparser.symbolsolver.model.typesystem.LazyType;
Expand All @@ -43,7 +45,7 @@
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class JavaParserInterfaceDeclaration extends AbstractTypeDeclaration public class JavaParserInterfaceDeclaration extends AbstractTypeDeclaration
implements ResolvedInterfaceDeclaration, TypeDeclarationWithResolutionCapabilities { implements ResolvedInterfaceDeclaration, MethodResolutionCapability, MethodUsageResolutionCapability {


private TypeSolver typeSolver; private TypeSolver typeSolver;
private ClassOrInterfaceDeclaration wrappedNode; private ClassOrInterfaceDeclaration wrappedNode;
Expand Down Expand Up @@ -258,6 +260,12 @@ public SymbolReference<ResolvedMethodDeclaration> solveMethod(String name, List<
return getContext().solveMethod(name, argumentsTypes, staticOnly); return getContext().solveMethod(name, argumentsTypes, staticOnly);
} }


@Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> argumentTypes,
Context invocationContext, List<ResolvedType> typeParameters) {
return getContext().solveMethodAsUsage(name, argumentTypes);
}

@Override @Override
public List<ResolvedReferenceType> getAncestors(boolean acceptIncompleteList) { public List<ResolvedReferenceType> getAncestors(boolean acceptIncompleteList) {
List<ResolvedReferenceType> ancestors = new ArrayList<>(); List<ResolvedReferenceType> ancestors = new ArrayList<>();
Expand Down
Expand Up @@ -24,6 +24,7 @@
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.LambdaArgumentTypePlaceholder; import com.github.javaparser.symbolsolver.javaparsermodel.LambdaArgumentTypePlaceholder;
import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
Expand All @@ -48,7 +49,7 @@
/** /**
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class JavassistClassDeclaration extends AbstractClassDeclaration { public class JavassistClassDeclaration extends AbstractClassDeclaration implements MethodUsageResolutionCapability {


private CtClass ctClass; private CtClass ctClass;
private TypeSolver typeSolver; private TypeSolver typeSolver;
Expand Down
Expand Up @@ -23,8 +23,9 @@
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration;
import com.github.javaparser.symbolsolver.logic.TypeDeclarationWithResolutionCapabilities; import com.github.javaparser.symbolsolver.logic.MethodResolutionCapability;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl; import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl;
Expand All @@ -46,7 +47,7 @@
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class JavassistEnumDeclaration extends AbstractTypeDeclaration public class JavassistEnumDeclaration extends AbstractTypeDeclaration
implements ResolvedEnumDeclaration, TypeDeclarationWithResolutionCapabilities { implements ResolvedEnumDeclaration, MethodResolutionCapability, MethodUsageResolutionCapability {


private CtClass ctClass; private CtClass ctClass;
private TypeSolver typeSolver; private TypeSolver typeSolver;
Expand Down
Expand Up @@ -24,8 +24,9 @@
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration;
import com.github.javaparser.symbolsolver.logic.TypeDeclarationWithResolutionCapabilities; import com.github.javaparser.symbolsolver.logic.MethodResolutionCapability;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl; import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl;
Expand All @@ -47,7 +48,7 @@
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class JavassistInterfaceDeclaration extends AbstractTypeDeclaration public class JavassistInterfaceDeclaration extends AbstractTypeDeclaration
implements ResolvedInterfaceDeclaration, TypeDeclarationWithResolutionCapabilities { implements ResolvedInterfaceDeclaration, MethodResolutionCapability, MethodUsageResolutionCapability {


private CtClass ctClass; private CtClass ctClass;
private TypeSolver typeSolver; private TypeSolver typeSolver;
Expand Down
Expand Up @@ -23,6 +23,7 @@
import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedReferenceType;
import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability;
import com.github.javaparser.symbolsolver.javaparsermodel.LambdaArgumentTypePlaceholder; import com.github.javaparser.symbolsolver.javaparsermodel.LambdaArgumentTypePlaceholder;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ContextHelper; import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ContextHelper;
import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration; import com.github.javaparser.symbolsolver.logic.AbstractClassDeclaration;
Expand All @@ -42,7 +43,7 @@
/** /**
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public class ReflectionClassDeclaration extends AbstractClassDeclaration { public class ReflectionClassDeclaration extends AbstractClassDeclaration implements MethodUsageResolutionCapability {


/// ///
/// Fields /// Fields
Expand Down Expand Up @@ -194,13 +195,13 @@ public Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType>
} }
if (getSuperClass() != null) { if (getSuperClass() != null) {
ResolvedClassDeclaration superClass = (ResolvedClassDeclaration) getSuperClass().getTypeDeclaration(); ResolvedClassDeclaration superClass = (ResolvedClassDeclaration) getSuperClass().getTypeDeclaration();
Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(superClass, name, argumentsTypes, typeSolver, invokationContext, typeParameterValues); Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(superClass, name, argumentsTypes, invokationContext, typeParameterValues);
if (ref.isPresent()) { if (ref.isPresent()) {
methods.add(ref.get()); methods.add(ref.get());
} }
} }
for (ResolvedReferenceType interfaceDeclaration : getInterfaces()) { for (ResolvedReferenceType interfaceDeclaration : getInterfaces()) {
Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(interfaceDeclaration.getTypeDeclaration(), name, argumentsTypes, typeSolver, invokationContext, typeParameterValues); Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(interfaceDeclaration.getTypeDeclaration(), name, argumentsTypes, invokationContext, typeParameterValues);
if (ref.isPresent()) { if (ref.isPresent()) {
methods.add(ref.get()); methods.add(ref.get());
} }
Expand Down

0 comments on commit 06d7e13

Please sign in to comment.