Skip to content

Commit

Permalink
moving Context out of model project
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Oct 14, 2016
1 parent cd885e8 commit 6b50c90
Show file tree
Hide file tree
Showing 37 changed files with 135 additions and 79 deletions.
@@ -1,9 +1,12 @@
package me.tomassetti.symbolsolver.model.resolution;
package me.tomassetti.symbolsolver.core.resolution;

import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.resolution.Value;
import me.tomassetti.symbolsolver.model.typesystem.Type;

import java.util.List;
Expand Down Expand Up @@ -63,7 +66,7 @@ default Optional<MethodUsage> solveMethodAsUsage(String name, List<Type> paramet
SymbolReference<MethodDeclaration> methodSolved = solveMethod(name, parameterTypes, typeSolver);
if (methodSolved.isSolved()) {
MethodDeclaration methodDeclaration = methodSolved.getCorrespondingDeclaration();
MethodUsage methodUsage = methodDeclaration.resolveTypeVariables(this, parameterTypes);
MethodUsage methodUsage = ContextHelper.resolveTypeVariables(this, methodDeclaration, parameterTypes);//methodDeclaration.resolveTypeVariables(this, parameterTypes);
return Optional.of(methodUsage);
} else {
return Optional.empty();
Expand Down
@@ -0,0 +1,28 @@
package me.tomassetti.symbolsolver.core.resolution;

import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration;
import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration;
import me.tomassetti.symbolsolver.javassistmodel.JavassistMethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.typesystem.Type;
import me.tomassetti.symbolsolver.reflectionmodel.ReflectionMethodDeclaration;

import java.util.List;

public class ContextHelper {

static MethodUsage resolveTypeVariables(Context context, MethodDeclaration methodDeclaration, List<Type> parameterTypes) {
if (methodDeclaration instanceof JavaParserMethodDeclaration) {
return ((JavaParserMethodDeclaration)methodDeclaration).resolveTypeVariables(context, parameterTypes);
} else if (methodDeclaration instanceof JavassistMethodDeclaration) {
return ((JavassistMethodDeclaration)methodDeclaration).resolveTypeVariables(context, parameterTypes);
} else if (methodDeclaration instanceof JavaParserEnumDeclaration.ValuesMethod) {
return ((JavaParserEnumDeclaration.ValuesMethod)methodDeclaration).resolveTypeVariables(context, parameterTypes);
} else if (methodDeclaration instanceof ReflectionMethodDeclaration) {
return ((ReflectionMethodDeclaration)methodDeclaration).resolveTypeVariables(context, parameterTypes);
} else {
throw new UnsupportedOperationException();
}
}
}
Expand Up @@ -16,7 +16,7 @@
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.*;
Expand Down
Expand Up @@ -9,7 +9,7 @@
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import com.github.javaparser.ast.stmt.*;
import me.tomassetti.symbolsolver.javaparsermodel.contexts.*;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.resolution.SymbolDeclarator;
import me.tomassetti.symbolsolver.javaparsermodel.declarators.FieldSymbolDeclarator;
Expand Down
@@ -1,6 +1,6 @@
package me.tomassetti.symbolsolver.javaparsermodel;

import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;

public class UnsolvedSymbolException extends RuntimeException {
Expand Down
@@ -1,9 +1,9 @@
package me.tomassetti.symbolsolver.javaparsermodel;

import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;

/**
* Created by federico on 30/07/15.
* @author Federico Tomassetti
*/
public class UnsolvedTypeException extends RuntimeException {

Expand Down
Expand Up @@ -4,7 +4,7 @@
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.resolution.Value;
Expand Down
Expand Up @@ -79,7 +79,7 @@ public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) {

// then among inherited fields
for (ReferenceType ancestor : getDeclaration().getAncestors()) {
Optional<Value> ref = ancestor.getTypeDeclaration().getContext().solveSymbolAsValue(name, typeSolver);
Optional<Value> ref = ContextHelper.getContext(ancestor.getTypeDeclaration()).solveSymbolAsValue(name, typeSolver);
if (ref.isPresent()) {
return ref;
}
Expand Down
@@ -0,0 +1,52 @@
package me.tomassetti.symbolsolver.javaparsermodel.contexts;

import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration;
import me.tomassetti.symbolsolver.javassistmodel.JavassistClassDeclaration;
import me.tomassetti.symbolsolver.javassistmodel.JavassistInterfaceDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.Type;
import me.tomassetti.symbolsolver.reflectionmodel.ReflectionClassDeclaration;
import me.tomassetti.symbolsolver.reflectionmodel.ReflectionInterfaceDeclaration;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Optional;

/**
* Created by federico on 14/10/16.
*/
public class ContextHelper {

public static Context getContext(TypeDeclaration typeDeclaration) {
try {
return (Context)typeDeclaration.getClass().getMethod("getContext").invoke(typeDeclaration);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}

public static Optional<MethodUsage> solveMethodAsUsage(TypeDeclaration typeDeclaration, String name,
List<Type> parameterTypes, TypeSolver typeSolver,
Context invokationContext, List<Type> typeParameters) {
if (typeDeclaration instanceof JavassistClassDeclaration) {
return ((JavassistClassDeclaration) typeDeclaration).solveMethodAsUsage(name, parameterTypes, typeSolver, invokationContext, typeParameters);
} else if (typeDeclaration instanceof JavassistInterfaceDeclaration) {
return ((JavassistInterfaceDeclaration) typeDeclaration).solveMethodAsUsage(name, parameterTypes, typeSolver, invokationContext, typeParameters);
} else if (typeDeclaration instanceof JavaParserEnumDeclaration) {
return ((JavaParserEnumDeclaration) typeDeclaration).solveMethodAsUsage(name, parameterTypes, typeSolver, invokationContext, typeParameters);
} else if (typeDeclaration instanceof ReflectionClassDeclaration) {
return ((ReflectionClassDeclaration) typeDeclaration).solveMethodAsUsage(name, parameterTypes, typeSolver, invokationContext, typeParameters);
} else if (typeDeclaration instanceof ReflectionInterfaceDeclaration) {
return ((ReflectionInterfaceDeclaration) typeDeclaration).solveMethodAsUsage(name, parameterTypes, typeSolver, invokationContext, typeParameters);
}
return getContext(typeDeclaration).solveMethodAsUsage(name, parameterTypes, typeSolver);
}

}
Expand Up @@ -3,6 +3,7 @@
import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.ast.expr.NameExpr;
import javaslang.Tuple2;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade;
import me.tomassetti.symbolsolver.javaparsermodel.UnsolvedSymbolException;
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
Expand Down Expand Up @@ -47,7 +48,7 @@ public Optional<Type> solveGenericType(String name, TypeSolver typeSolver) {
private Optional<MethodUsage> solveMethodAsUsage(ReferenceType refType, String name,
List<Type> parameterTypes, TypeSolver typeSolver,
Context invokationContext) {
Optional<MethodUsage> ref = refType.getTypeDeclaration().solveMethodAsUsage(name, parameterTypes, typeSolver, invokationContext, refType.parameters());
Optional<MethodUsage> ref = ContextHelper.solveMethodAsUsage(refType.getTypeDeclaration(), name, parameterTypes, typeSolver, invokationContext, refType.parameters());
if (ref.isPresent()) {
MethodUsage methodUsage = ref.get();
Type returnType = refType.replaceTypeParams(methodUsage.returnType());
Expand Down
Expand Up @@ -7,7 +7,7 @@
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.resolution.Value;
Expand Down
Expand Up @@ -13,7 +13,7 @@
import me.tomassetti.symbolsolver.javaparsermodel.UnsolvedSymbolException;
import me.tomassetti.symbolsolver.logic.AbstractClassDeclaration;
import me.tomassetti.symbolsolver.model.declarations.*;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
Expand Down Expand Up @@ -44,7 +44,6 @@ public SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> pa
return getContext().solveMethod(name, parameterTypes, typeSolver());
}

@Override
public Context getContext() {
return JavaParserFactory.getContext(wrappedNode, typeSolver);
}
Expand Down
Expand Up @@ -11,7 +11,7 @@
import me.tomassetti.symbolsolver.logic.AbstractTypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.*;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
Expand Down Expand Up @@ -59,7 +59,6 @@ public Set<MethodDeclaration> getDeclaredMethods() {
return methods;
}

@Override
public Context getContext() {
return JavaParserFactory.getContext(wrappedNode, typeSolver);
}
Expand Down Expand Up @@ -230,7 +229,6 @@ public SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> pa
return getContext().solveMethod(name, parameterTypes, typeSolver);
}

@Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<Type> parameterTypes, TypeSolver typeSolver, Context invokationContext, List<Type> typeParameterValues) {
if (name.equals("values") && parameterTypes.isEmpty()) {
return Optional.of(new ValuesMethod().getUsage(null));
Expand Down Expand Up @@ -332,7 +330,8 @@ public com.github.javaparser.ast.body.EnumDeclaration getWrappedNode()
return wrappedNode;
}

private class ValuesMethod implements MethodDeclaration {
// Needed by ContextHelper
public class ValuesMethod implements MethodDeclaration {

@Override
public TypeDeclaration declaringType() {
Expand All @@ -358,7 +357,6 @@ public MethodUsage getUsage(Node node) {
throw new UnsupportedOperationException();
}

@Override
public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTypes) {
return new MethodUsage(this, typeSolver);
}
Expand Down
Expand Up @@ -10,7 +10,7 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import me.tomassetti.symbolsolver.logic.AbstractTypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.*;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
Expand Down Expand Up @@ -53,7 +53,6 @@ public Set<MethodDeclaration> getDeclaredMethods() {
return methods;
}

@Override
public Context getContext() {
return JavaParserFactory.getContext(wrappedNode, typeSolver);
}
Expand Down
Expand Up @@ -10,7 +10,7 @@
import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.ReferenceType;
Expand Down Expand Up @@ -76,7 +76,6 @@ public MethodUsage getUsage(Node node) {
throw new UnsupportedOperationException();
}

@Override
public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTypes) {
Type returnType = replaceTypeParams(new JavaParserMethodDeclaration(wrappedNode, typeSolver).getReturnType(), typeSolver, context);
List<Type> params = new ArrayList<>();
Expand Down
Expand Up @@ -8,7 +8,7 @@
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
Expand Down Expand Up @@ -113,7 +113,6 @@ public String getQualifiedName() {
return getName();
}

@Override
public Context getContext() {
throw new UnsupportedOperationException();
}
Expand Down
Expand Up @@ -7,7 +7,7 @@
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.ReferenceType;
Expand Down Expand Up @@ -39,7 +39,6 @@ public String getQualifiedName() {
return getName();
}

@Override
public Context getContext() {
throw new UnsupportedOperationException();
}
Expand Down
Expand Up @@ -11,7 +11,7 @@
import me.tomassetti.symbolsolver.resolution.MethodResolutionLogic;
import me.tomassetti.symbolsolver.model.declarations.*;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
Expand Down Expand Up @@ -122,8 +122,6 @@ private List<Type> parseTypeParameters(String signature, TypeSolver typeSolver,
}
}


@Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<Type> parameterTypes, TypeSolver typeSolver,
Context invokationContext, List<Type> typeParameterValues) {

Expand Down Expand Up @@ -224,7 +222,6 @@ public List<ReferenceType> getAncestors() {
return ancestors;
}

@Override
public Context getContext() {
throw new UnsupportedOperationException();
}
Expand Down
Expand Up @@ -9,7 +9,7 @@
import me.tomassetti.symbolsolver.resolution.MethodResolutionLogic;
import me.tomassetti.symbolsolver.model.declarations.*;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
Expand Down Expand Up @@ -58,7 +58,6 @@ public String getQualifiedName() {
return ctClass.getName();
}

@Override
public Context getContext() {
throw new UnsupportedOperationException();
}
Expand Down Expand Up @@ -88,7 +87,6 @@ private List<Type> parseTypeParameters(String signature, TypeSolver typeSolver,
}
}

@Override
public Optional<MethodUsage> solveMethodAsUsage(String name, List<Type> parameterTypes, TypeSolver typeSolver,
Context invokationContext, List<Type> typeParameterValues) {

Expand Down
Expand Up @@ -10,7 +10,7 @@
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.invokations.MethodUsage;
import me.tomassetti.symbolsolver.model.typesystem.Type;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.TypeParameter;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;

Expand Down Expand Up @@ -105,7 +105,6 @@ public MethodUsage getUsage(Node node) {
throw new UnsupportedOperationException();
}

@Override
public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTypes) {
throw new UnsupportedOperationException();
}
Expand Down
Expand Up @@ -7,7 +7,7 @@
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration;
import me.tomassetti.symbolsolver.model.typesystem.Type;
import me.tomassetti.symbolsolver.model.resolution.Context;
import me.tomassetti.symbolsolver.core.resolution.Context;
import me.tomassetti.symbolsolver.model.resolution.SymbolReference;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver;

Expand Down

0 comments on commit 6b50c90

Please sign in to comment.