Skip to content

Commit

Permalink
removing deps to extract the model module
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Nov 2, 2015
1 parent 4744892 commit 767fd20
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 16 deletions.
Expand Up @@ -2,14 +2,13 @@


import me.tomassetti.symbolsolver.model.typesystem.ReferenceTypeUsage; import me.tomassetti.symbolsolver.model.typesystem.ReferenceTypeUsage;
import me.tomassetti.symbolsolver.resolution.TypeSolver; import me.tomassetti.symbolsolver.resolution.TypeSolver;
import me.tomassetti.symbolsolver.resolution.reflection.ReflectionClassDeclaration;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;


/** /**
* A class declaration. * Declaration of a Class (not an interface or an enum).
*/ */
public interface ClassDeclaration extends TypeDeclaration, TypeParametrized { public interface ClassDeclaration extends TypeDeclaration, TypeParametrized {


Expand All @@ -19,6 +18,7 @@ default boolean isClass() {
} }


ReferenceTypeUsage getSuperClass(TypeSolver typeSolvers); ReferenceTypeUsage getSuperClass(TypeSolver typeSolvers);

List<InterfaceDeclaration> getInterfaces(TypeSolver typeSolver); List<InterfaceDeclaration> getInterfaces(TypeSolver typeSolver);


default List<ReferenceTypeUsage> getAllSuperClasses(TypeSolver typeSolver) { default List<ReferenceTypeUsage> getAllSuperClasses(TypeSolver typeSolver) {
Expand All @@ -35,8 +35,9 @@ default List<ReferenceTypeUsage> getAllSuperClasses(TypeSolver typeSolver) {
i--; i--;
} }
} }
ReferenceTypeUsage object = new ReferenceTypeUsage(new ReflectionClassDeclaration(Object.class, typeSolver), typeSolver); TypeDeclaration objectType = typeSolver.solveType(Object.class.getCanonicalName());
superclasses.add(object); ReferenceTypeUsage objectRef = new ReferenceTypeUsage(objectType, typeSolver);
superclasses.add(objectRef);
return superclasses.stream().filter((s)->s.getTypeDeclaration().isClass()).collect(Collectors.toList()); return superclasses.stream().filter((s)->s.getTypeDeclaration().isClass()).collect(Collectors.toList());
} }


Expand Down
@@ -1,10 +1,11 @@
package me.tomassetti.symbolsolver.model.invokations; package me.tomassetti.symbolsolver.model.invokations;


import me.tomassetti.symbolsolver.model.typesystem.TypeUsage; import me.tomassetti.symbolsolver.model.typesystem.TypeUsage;
import me.tomassetti.symbolsolver.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration; import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;


import me.tomassetti.symbolsolver.resolution.TypeSolver;

import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
Expand Down
Expand Up @@ -5,7 +5,6 @@
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.resolution.javaparser.LambdaArgumentTypeUsagePlaceholder; import me.tomassetti.symbolsolver.resolution.javaparser.LambdaArgumentTypeUsagePlaceholder;
import me.tomassetti.symbolsolver.resolution.javaparser.declarations.JavaParserTypeVariableDeclaration; import me.tomassetti.symbolsolver.resolution.javaparser.declarations.JavaParserTypeVariableDeclaration;
import me.tomassetti.symbolsolver.resolution.reflection.ReflectionClassDeclaration;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
Expand Down Expand Up @@ -105,14 +104,16 @@ public String toString() {


private Optional<TypeUsage> typeParamByName(String name){ private Optional<TypeUsage> typeParamByName(String name){
List<TypeUsage> typeParameters = this.typeParameters; List<TypeUsage> typeParameters = this.typeParameters;
TypeDeclaration objectType = typeSolver.solveType(Object.class.getCanonicalName());
ReferenceTypeUsage objectRef = new ReferenceTypeUsage(objectType, typeSolver);
if (typeDeclaration.getTypeParameters().size() != typeParameters.size()){ if (typeDeclaration.getTypeParameters().size() != typeParameters.size()){
if (typeParameters.size() > 0) { if (typeParameters.size() > 0) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
// type parameters not specified, default to Object // type parameters not specified, default to Object
typeParameters = new ArrayList<>(); typeParameters = new ArrayList<>();
for (int i=0;i<typeDeclaration.getTypeParameters().size();i++){ for (int i=0;i<typeDeclaration.getTypeParameters().size();i++){
typeParameters.add(new ReferenceTypeUsage(new ReflectionClassDeclaration(Object.class, typeSolver), typeSolver)); typeParameters.add(objectRef);
} }
} }
int i = 0; int i = 0;
Expand Down Expand Up @@ -183,6 +184,9 @@ public TypeUsage replaceParam(String name, TypeUsage replaced) {
public List<ReferenceTypeUsage> getAllAncestors() { public List<ReferenceTypeUsage> getAllAncestors() {
List<ReferenceTypeUsage> ancestors = typeDeclaration.getAllAncestors(); List<ReferenceTypeUsage> ancestors = typeDeclaration.getAllAncestors();


TypeDeclaration objectType = typeSolver.solveType(Object.class.getCanonicalName());
ReferenceTypeUsage objectRef = new ReferenceTypeUsage(objectType, typeSolver);

ancestors = ancestors.stream().map((a)->replaceTypeParams(a).asReferenceTypeUsage()).collect(Collectors.toList()); ancestors = ancestors.stream().map((a)->replaceTypeParams(a).asReferenceTypeUsage()).collect(Collectors.toList());
// TODO replace type parameters // TODO replace type parameters


Expand All @@ -192,8 +196,7 @@ public List<ReferenceTypeUsage> getAllAncestors() {
i--; i--;
} }
} }
ReferenceTypeUsage object = new ReferenceTypeUsage(new ReflectionClassDeclaration(Object.class, typeSolver), typeSolver); ancestors.add(objectRef);
ancestors.add(object);
return ancestors; return ancestors;
} }


Expand Down
Expand Up @@ -17,6 +17,12 @@ public TypeSolver getParent() {
return parent; return parent;
} }


public CombinedTypeSolver(TypeSolver... elements) {
for (TypeSolver el : elements) {
add(el);
}
}

@Override @Override
public void setParent(TypeSolver parent) { public void setParent(TypeSolver parent) {
this.parent = parent; this.parent = parent;
Expand Down
Expand Up @@ -15,6 +15,7 @@
import me.tomassetti.symbolsolver.javaparser.Navigator; import me.tomassetti.symbolsolver.javaparser.Navigator;
import me.tomassetti.symbolsolver.model.declarations.ClassDeclaration; import me.tomassetti.symbolsolver.model.declarations.ClassDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
import me.tomassetti.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
import me.tomassetti.symbolsolver.resolution.typesolvers.DummyTypeSolver; import me.tomassetti.symbolsolver.resolution.typesolvers.DummyTypeSolver;
import me.tomassetti.symbolsolver.resolution.typesolvers.JarTypeSolver; import me.tomassetti.symbolsolver.resolution.typesolvers.JarTypeSolver;
import me.tomassetti.symbolsolver.resolution.typesolvers.JreTypeSolver; import me.tomassetti.symbolsolver.resolution.typesolvers.JreTypeSolver;
Expand Down Expand Up @@ -277,7 +278,7 @@ public void resolveGenericReturnTypeOfMethodInJar() throws ParseException, IOExc
MethodCallExpr call = Navigator.findMethodCall(method, "getTypes"); MethodCallExpr call = Navigator.findMethodCall(method, "getTypes");


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(call); MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(call);


assertEquals("getTypes", methodUsage.getName()); assertEquals("getTypes", methodUsage.getName());
Expand All @@ -294,7 +295,7 @@ public void resolveTypeUsageOfFirstMethodInGenericClass() throws ParseException,
MethodCallExpr callToGetTypes = Navigator.findMethodCall(method, "getTypes"); MethodCallExpr callToGetTypes = Navigator.findMethodCall(method, "getTypes");


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToGetTypes); MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToGetTypes);


assertEquals("java.util.List<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe()); assertEquals("java.util.List<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe());
Expand All @@ -310,7 +311,7 @@ public void resolveTypeUsageOfMethodInGenericClass() throws ParseException, IOEx
MethodCallExpr callToStream = Navigator.findMethodCall(method, "stream"); MethodCallExpr callToStream = Navigator.findMethodCall(method, "stream");


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToStream); MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToStream);


assertEquals("java.util.stream.Stream<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe()); assertEquals("java.util.stream.Stream<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe());
Expand All @@ -324,7 +325,7 @@ public void resolveTypeUsageOfCascadeMethodInGenericClass() throws ParseExceptio
MethodCallExpr callToFilter = Navigator.findMethodCall(method, "filter"); MethodCallExpr callToFilter = Navigator.findMethodCall(method, "filter");


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToFilter); MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToFilter);


assertEquals("java.util.stream.Stream<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe()); assertEquals("java.util.stream.Stream<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe());
Expand All @@ -339,7 +340,7 @@ public void resolveLambdaType() throws ParseException, IOException {
Expression lambdaExpr = callToFilter.getArgs().get(0); Expression lambdaExpr = callToFilter.getArgs().get(0);


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
TypeUsage typeOfLambdaExpr = JavaParserFacade.get(typeSolver).getType(lambdaExpr); TypeUsage typeOfLambdaExpr = JavaParserFacade.get(typeSolver).getType(lambdaExpr);


assertEquals("java.util.function.Predicate<com.github.javaparser.ast.body.TypeDeclaration>", typeOfLambdaExpr.describe()); assertEquals("java.util.function.Predicate<com.github.javaparser.ast.body.TypeDeclaration>", typeOfLambdaExpr.describe());
Expand All @@ -354,7 +355,7 @@ public void resolveReferenceToLambdaParam() throws ParseException, IOException {
Expression referenceToT = callToGetName.getScope(); Expression referenceToT = callToGetName.getScope();


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
TypeUsage typeOfT = JavaParserFacade.get(typeSolver).getType(referenceToT); TypeUsage typeOfT = JavaParserFacade.get(typeSolver).getType(referenceToT);


assertEquals("com.github.javaparser.ast.body.TypeDeclaration", typeOfT.describe()); assertEquals("com.github.javaparser.ast.body.TypeDeclaration", typeOfT.describe());
Expand All @@ -368,7 +369,7 @@ public void resolveReferenceToCallOnLambdaParam() throws ParseException, IOExcep
MethodCallExpr callToGetName = Navigator.findMethodCall(method, "getName"); MethodCallExpr callToGetName = Navigator.findMethodCall(method, "getName");


String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar"; String pathToJar = "src/test/resources/javaparser-core-2.1.0.jar";
JarTypeSolver typeSolver = new JarTypeSolver(pathToJar); TypeSolver typeSolver = new CombinedTypeSolver(new JreTypeSolver(), new JarTypeSolver(pathToJar));
MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToGetName); MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToGetName);


assertEquals("getName", methodUsage.getName()); assertEquals("getName", methodUsage.getName());
Expand Down

0 comments on commit 767fd20

Please sign in to comment.