Skip to content

Commit

Permalink
working on migrating to JP classes
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Sep 28, 2017
1 parent c3dc366 commit 223fc76
Show file tree
Hide file tree
Showing 32 changed files with 404 additions and 376 deletions.
Expand Up @@ -16,12 +16,12 @@


package com.github.javaparser.symbolsolver.core.resolution; package com.github.javaparser.symbolsolver.core.resolution;


import com.github.javaparser.symbolsolver.model.declarations.*; import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.symbolsolver.model.methods.MethodUsage; import com.github.javaparser.resolution.declarations.*;
import com.github.javaparser.resolution.types.ResolvedType;
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.resolution.Value; import com.github.javaparser.symbolsolver.model.resolution.Value;
import com.github.javaparser.symbolsolver.model.typesystem.Type;


import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
Expand All @@ -38,25 +38,25 @@ public interface Context {


/* Type resolution */ /* Type resolution */


default Optional<Type> solveGenericType(String name, TypeSolver typeSolver) { default Optional<ResolvedType> solveGenericType(String name, TypeSolver typeSolver) {
return Optional.empty(); return Optional.empty();
} }


default SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) { default SymbolReference<ResolvedTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
Context parent = getParent(); Context parent = getParent();
if (parent == null) { if (parent == null) {
return SymbolReference.unsolved(ReferenceTypeDeclaration.class); return SymbolReference.unsolved(ResolvedReferenceTypeDeclaration.class);
} else { } else {
return parent.solveType(name, typeSolver); return parent.solveType(name, typeSolver);
} }
} }


/* Symbol resolution */ /* Symbol resolution */


SymbolReference<? extends ValueDeclaration> solveSymbol(String name, TypeSolver typeSolver); SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver);


default Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { default Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) {
SymbolReference<? extends ValueDeclaration> ref = solveSymbol(name, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = solveSymbol(name, typeSolver);
if (ref.isSolved()) { if (ref.isSolved()) {
Value value = Value.from(ref.getCorrespondingDeclaration()); Value value = Value.from(ref.getCorrespondingDeclaration());
return Optional.of(value); return Optional.of(value);
Expand All @@ -70,7 +70,7 @@ default Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) {
/** /**
* We find the method declaration which is the best match for the given name and list of typeParametersValues. * We find the method declaration which is the best match for the given name and list of typeParametersValues.
*/ */
default SymbolReference<ConstructorDeclaration> solveConstructor(List<Type> argumentsTypes, TypeSolver typeSolver) { default SymbolReference<ResolvedConstructorDeclaration> solveConstructor(List<ResolvedType> argumentsTypes, TypeSolver typeSolver) {
throw new IllegalArgumentException("Constructor resolution is available only on Class Context"); throw new IllegalArgumentException("Constructor resolution is available only on Class Context");
} }


Expand All @@ -79,16 +79,16 @@ default SymbolReference<ConstructorDeclaration> solveConstructor(List<Type> argu
/** /**
* We find the method declaration which is the best match for the given name and list of typeParametersValues. * We find the method declaration which is the best match for the given name and list of typeParametersValues.
*/ */
SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> argumentsTypes, boolean staticOnly, TypeSolver typeSolver); SymbolReference<ResolvedMethodDeclaration> solveMethod(String name, List<ResolvedType> argumentsTypes, boolean staticOnly, TypeSolver typeSolver);


/** /**
* Similar to solveMethod but we return a MethodUsage. A MethodUsage corresponds to a MethodDeclaration plus the * Similar to solveMethod but we return a MethodUsage. A MethodUsage corresponds to a MethodDeclaration plus the
* resolved type variables. * resolved type variables.
*/ */
default Optional<MethodUsage> solveMethodAsUsage(String name, List<Type> argumentsTypes, TypeSolver typeSolver) { default Optional<MethodUsage> solveMethodAsUsage(String name, List<ResolvedType> argumentsTypes, TypeSolver typeSolver) {
SymbolReference<MethodDeclaration> methodSolved = solveMethod(name, argumentsTypes, false, typeSolver); SymbolReference<ResolvedMethodDeclaration> methodSolved = solveMethod(name, argumentsTypes, false, typeSolver);
if (methodSolved.isSolved()) { if (methodSolved.isSolved()) {
MethodDeclaration methodDeclaration = methodSolved.getCorrespondingDeclaration(); ResolvedMethodDeclaration methodDeclaration = methodSolved.getCorrespondingDeclaration();
MethodUsage methodUsage = ContextHelper.resolveTypeVariables(this, methodDeclaration, argumentsTypes);//methodDeclaration.resolveTypeVariables(this, argumentsTypes); MethodUsage methodUsage = ContextHelper.resolveTypeVariables(this, methodDeclaration, argumentsTypes);//methodDeclaration.resolveTypeVariables(this, argumentsTypes);
return Optional.of(methodUsage); return Optional.of(methodUsage);
} else { } else {
Expand Down
Expand Up @@ -16,12 +16,12 @@


package com.github.javaparser.symbolsolver.core.resolution; package com.github.javaparser.symbolsolver.core.resolution;


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.javaparsermodel.declarations.JavaParserEnumDeclaration; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration;
import com.github.javaparser.symbolsolver.javassistmodel.JavassistMethodDeclaration; import com.github.javaparser.symbolsolver.javassistmodel.JavassistMethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.methods.MethodUsage;
import com.github.javaparser.symbolsolver.model.typesystem.Type;
import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionMethodDeclaration; import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionMethodDeclaration;


import java.util.List; import java.util.List;
Expand All @@ -35,7 +35,7 @@ private ContextHelper() {
// prevent instantiation // prevent instantiation
} }


static MethodUsage resolveTypeVariables(Context context, MethodDeclaration methodDeclaration, List<Type> parameterTypes) { static MethodUsage resolveTypeVariables(Context context, ResolvedMethodDeclaration methodDeclaration, List<ResolvedType> parameterTypes) {
if (methodDeclaration instanceof JavaParserMethodDeclaration) { if (methodDeclaration instanceof JavaParserMethodDeclaration) {
return ((JavaParserMethodDeclaration) methodDeclaration).resolveTypeVariables(context, parameterTypes); return ((JavaParserMethodDeclaration) methodDeclaration).resolveTypeVariables(context, parameterTypes);
} else if (methodDeclaration instanceof JavassistMethodDeclaration) { } else if (methodDeclaration instanceof JavassistMethodDeclaration) {
Expand Down
Expand Up @@ -16,14 +16,14 @@


package com.github.javaparser.symbolsolver.declarations.common; package com.github.javaparser.symbolsolver.declarations.common;


import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.resolution.types.ResolvedTypeVariable;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.logic.InferenceContext; import com.github.javaparser.symbolsolver.logic.InferenceContext;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration;
import com.github.javaparser.symbolsolver.model.methods.MethodUsage;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.Type;
import com.github.javaparser.symbolsolver.model.typesystem.TypeVariable;
import com.github.javaparser.symbolsolver.reflectionmodel.MyObjectProvider; import com.github.javaparser.symbolsolver.reflectionmodel.MyObjectProvider;


import java.util.ArrayList; import java.util.ArrayList;
Expand All @@ -35,19 +35,19 @@
*/ */
public class MethodDeclarationCommonLogic { public class MethodDeclarationCommonLogic {


private MethodDeclaration methodDeclaration; private ResolvedMethodDeclaration methodDeclaration;
private TypeSolver typeSolver; private TypeSolver typeSolver;


public MethodDeclarationCommonLogic(MethodDeclaration methodDeclaration, TypeSolver typeSolver) { public MethodDeclarationCommonLogic(ResolvedMethodDeclaration methodDeclaration, TypeSolver typeSolver) {
this.methodDeclaration = methodDeclaration; this.methodDeclaration = methodDeclaration;
this.typeSolver = typeSolver; this.typeSolver = typeSolver;
} }


public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTypes) { public MethodUsage resolveTypeVariables(Context context, List<ResolvedType> parameterTypes) {
Type returnType = replaceTypeParams(methodDeclaration.getReturnType(), typeSolver, context); ResolvedType returnType = replaceTypeParams(methodDeclaration.getReturnType(), typeSolver, context);
List<Type> params = new ArrayList<>(); List<ResolvedType> params = new ArrayList<>();
for (int i = 0; i < methodDeclaration.getNumberOfParams(); i++) { for (int i = 0; i < methodDeclaration.getNumberOfParams(); i++) {
Type replaced = replaceTypeParams(methodDeclaration.getParam(i).getType(), typeSolver, context); ResolvedType replaced = replaceTypeParams(methodDeclaration.getParam(i).getType(), typeSolver, context);
params.add(replaced); params.add(replaced);
} }


Expand All @@ -56,8 +56,8 @@ public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTyp
// Map<TypeParameterDeclaration, Type> determinedTypeParameters = new HashMap<>(); // Map<TypeParameterDeclaration, Type> determinedTypeParameters = new HashMap<>();
InferenceContext inferenceContext = new InferenceContext(MyObjectProvider.INSTANCE); InferenceContext inferenceContext = new InferenceContext(MyObjectProvider.INSTANCE);
for (int i = 0; i < methodDeclaration.getNumberOfParams() - (methodDeclaration.hasVariadicParameter() ? 1 : 0); i++) { for (int i = 0; i < methodDeclaration.getNumberOfParams() - (methodDeclaration.hasVariadicParameter() ? 1 : 0); i++) {
Type formalParamType = methodDeclaration.getParam(i).getType(); ResolvedType formalParamType = methodDeclaration.getParam(i).getType();
Type actualParamType = parameterTypes.get(i); ResolvedType actualParamType = parameterTypes.get(i);
inferenceContext.addPair(formalParamType, actualParamType); inferenceContext.addPair(formalParamType, actualParamType);
} }


Expand All @@ -66,11 +66,11 @@ public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTyp
return new MethodUsage(methodDeclaration, params, returnType); return new MethodUsage(methodDeclaration, params, returnType);
} }


private Type replaceTypeParams(Type type, TypeSolver typeSolver, Context context) { private ResolvedType replaceTypeParams(ResolvedType type, TypeSolver typeSolver, Context context) {
if (type.isTypeVariable()) { if (type.isTypeVariable()) {
TypeParameterDeclaration typeParameter = type.asTypeParameter(); ResolvedTypeParameterDeclaration typeParameter = type.asTypeParameter();
if (typeParameter.declaredOnType()) { if (typeParameter.declaredOnType()) {
Optional<Type> typeParam = typeParamByName(typeParameter.getName(), typeSolver, context); Optional<ResolvedType> typeParam = typeParamByName(typeParameter.getName(), typeSolver, context);
if (typeParam.isPresent()) { if (typeParam.isPresent()) {
type = typeParam.get(); type = typeParam.get();
} }
Expand All @@ -84,11 +84,11 @@ private Type replaceTypeParams(Type type, TypeSolver typeSolver, Context context
return type; return type;
} }


protected Optional<Type> typeParamByName(String name, TypeSolver typeSolver, Context context) { protected Optional<ResolvedType> typeParamByName(String name, TypeSolver typeSolver, Context context) {
return methodDeclaration.getTypeParameters().stream().filter(tp -> tp.getName().equals(name)).map(tp -> toType(tp)).findFirst(); return methodDeclaration.getTypeParameters().stream().filter(tp -> tp.getName().equals(name)).map(tp -> toType(tp)).findFirst();
} }


protected Type toType(TypeParameterDeclaration typeParameterDeclaration) { protected ResolvedType toType(ResolvedTypeParameterDeclaration typeParameterDeclaration) {
return new TypeVariable(typeParameterDeclaration); return new ResolvedTypeVariable(typeParameterDeclaration);
} }
} }
Expand Up @@ -20,13 +20,13 @@
import com.github.javaparser.ast.expr.Expression; import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.FieldAccessExpr; import com.github.javaparser.ast.expr.FieldAccessExpr;
import com.github.javaparser.ast.expr.MethodCallExpr; import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
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.JavaParserFactory; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration;
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.resolution.Value; import com.github.javaparser.symbolsolver.model.resolution.Value;
import com.github.javaparser.symbolsolver.model.typesystem.Type;
import com.github.javaparser.symbolsolver.resolution.SymbolDeclarator; import com.github.javaparser.symbolsolver.resolution.SymbolDeclarator;


import java.util.Optional; import java.util.Optional;
Expand All @@ -45,13 +45,13 @@ public abstract class AbstractJavaParserContext<N extends Node> implements Conte
/// Static methods /// Static methods
/// ///


public static final SymbolReference<ValueDeclaration> solveWith(SymbolDeclarator symbolDeclarator, String name) { public static final SymbolReference<ResolvedValueDeclaration> solveWith(SymbolDeclarator symbolDeclarator, String name) {
for (ValueDeclaration decl : symbolDeclarator.getSymbolDeclarations()) { for (ResolvedValueDeclaration decl : symbolDeclarator.getSymbolDeclarations()) {
if (decl.getName().equals(name)) { if (decl.getName().equals(name)) {
return SymbolReference.solved(decl); return SymbolReference.solved(decl);
} }
} }
return SymbolReference.unsolved(ValueDeclaration.class); return SymbolReference.unsolved(ResolvedValueDeclaration.class);
} }


/// ///
Expand Down Expand Up @@ -88,7 +88,7 @@ public int hashCode() {
} }


@Override @Override
public Optional<Type> solveGenericType(String name, TypeSolver typeSolver) { public Optional<ResolvedType> solveGenericType(String name, TypeSolver typeSolver) {
Context parent = getParent(); Context parent = getParent();
if (parent == null) { if (parent == null) {
return Optional.empty(); return Optional.empty();
Expand Down
Expand Up @@ -4,17 +4,17 @@
import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.nodeTypes.NodeWithParameters; import com.github.javaparser.ast.nodeTypes.NodeWithParameters;
import com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters; import com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters;
import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
import com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration;
import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.resolution.types.ResolvedTypeVariable;
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.javaparsermodel.declarations.JavaParserTypeParameter; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration;
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.resolution.Value; import com.github.javaparser.symbolsolver.model.resolution.Value;
import com.github.javaparser.symbolsolver.model.typesystem.Type;
import com.github.javaparser.symbolsolver.model.typesystem.TypeVariable;
import com.github.javaparser.symbolsolver.resolution.SymbolDeclarator; import com.github.javaparser.symbolsolver.resolution.SymbolDeclarator;


import java.util.List; import java.util.List;
Expand All @@ -30,10 +30,10 @@ public AbstractMethodLikeDeclarationContext(T wrappedNode, TypeSolver typeSolver
super(wrappedNode, typeSolver); super(wrappedNode, typeSolver);
} }


public final SymbolReference<? extends ValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { public final SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) {
for (Parameter parameter : wrappedNode.getParameters()) { for (Parameter parameter : wrappedNode.getParameters()) {
SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(parameter, typeSolver); SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(parameter, typeSolver);
SymbolReference<? extends ValueDeclaration> symbolReference = AbstractJavaParserContext.solveWith(sb, name); SymbolReference<? extends ResolvedValueDeclaration> symbolReference = AbstractJavaParserContext.solveWith(sb, name);
if (symbolReference.isSolved()) { if (symbolReference.isSolved()) {
return symbolReference; return symbolReference;
} }
Expand All @@ -44,10 +44,10 @@ public final SymbolReference<? extends ValueDeclaration> solveSymbol(String name
} }


@Override @Override
public final Optional<Type> solveGenericType(String name, TypeSolver typeSolver) { public final Optional<ResolvedType> solveGenericType(String name, TypeSolver typeSolver) {
for (com.github.javaparser.ast.type.TypeParameter tp : wrappedNode.getTypeParameters()) { for (com.github.javaparser.ast.type.TypeParameter tp : wrappedNode.getTypeParameters()) {
if (tp.getName().getId().equals(name)) { if (tp.getName().getId().equals(name)) {
return Optional.of(new TypeVariable(new JavaParserTypeParameter(tp, typeSolver))); return Optional.of(new ResolvedTypeVariable(new JavaParserTypeParameter(tp, typeSolver)));
} }
} }
return super.solveGenericType(name, typeSolver); return super.solveGenericType(name, typeSolver);
Expand All @@ -69,7 +69,7 @@ public final Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolv
} }


@Override @Override
public final SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) { public final SymbolReference<ResolvedTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
if (wrappedNode.getTypeParameters() != null) { if (wrappedNode.getTypeParameters() != null) {
for (com.github.javaparser.ast.type.TypeParameter tp : wrappedNode.getTypeParameters()) { for (com.github.javaparser.ast.type.TypeParameter tp : wrappedNode.getTypeParameters()) {
if (tp.getName().getId().equals(name)) { if (tp.getName().getId().equals(name)) {
Expand All @@ -94,8 +94,8 @@ public final SymbolReference<TypeDeclaration> solveType(String name, TypeSolver
} }


@Override @Override
public final SymbolReference<MethodDeclaration> solveMethod( public final SymbolReference<ResolvedMethodDeclaration> solveMethod(
String name, List<Type> argumentsTypes, boolean staticOnly, TypeSolver typeSolver) { String name, List<ResolvedType> argumentsTypes, boolean staticOnly, TypeSolver typeSolver) {
return getParent().solveMethod(name, argumentsTypes, false, typeSolver); return getParent().solveMethod(name, argumentsTypes, false, typeSolver);
} }
} }

0 comments on commit 223fc76

Please sign in to comment.