Skip to content

Commit

Permalink
more refactoring for ReferenceTypeDeclaration
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Nov 5, 2016
1 parent 6df1aa2 commit a1c7c58
Show file tree
Hide file tree
Showing 19 changed files with 73 additions and 64 deletions.
Expand Up @@ -18,6 +18,7 @@

import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration;
import com.github.javaparser.symbolsolver.model.methods.MethodUsage;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
Expand All @@ -44,7 +45,7 @@ default Optional<Type> solveGenericType(String name, TypeSolver typeSolver) {
return Optional.empty();
}

default SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
default SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
Context parent = getParent();
if (parent == null) {
return SymbolReference.unsolved(ReferenceTypeDeclaration.class);
Expand Down
Expand Up @@ -245,11 +245,11 @@ private MethodUsage toMethodUsage(MethodReferenceExpr methodReferenceExpr) {
throw new UnsupportedOperationException(typeExpr.getType().getClass().getCanonicalName());
}
ClassOrInterfaceType classOrInterfaceType = (ClassOrInterfaceType) typeExpr.getType();
SymbolReference<ReferenceTypeDeclaration> typeDeclarationSymbolReference = JavaParserFactory.getContext(classOrInterfaceType, typeSolver).solveType(classOrInterfaceType.getName(), typeSolver);
SymbolReference<TypeDeclaration> typeDeclarationSymbolReference = JavaParserFactory.getContext(classOrInterfaceType, typeSolver).solveType(classOrInterfaceType.getName(), typeSolver);
if (!typeDeclarationSymbolReference.isSolved()) {
throw new UnsupportedOperationException();
}
List<MethodUsage> methodUsages = typeDeclarationSymbolReference.getCorrespondingDeclaration().getAllMethods().stream().filter(it -> it.getName().equals(methodReferenceExpr.getIdentifier())).collect(Collectors.toList());
List<MethodUsage> methodUsages = ((ReferenceTypeDeclaration)typeDeclarationSymbolReference.getCorrespondingDeclaration()).getAllMethods().stream().filter(it -> it.getName().equals(methodReferenceExpr.getIdentifier())).collect(Collectors.toList());
switch (methodUsages.size()) {
case 0:
throw new UnsupportedOperationException();
Expand Down Expand Up @@ -439,10 +439,10 @@ private Type getTypeConcrete(Node node, boolean solveLambdas) {
// We should understand if this is a static access
if (fieldAccessExpr.getScope() instanceof NameExpr) {
NameExpr staticValue = (NameExpr) fieldAccessExpr.getScope();
SymbolReference<ReferenceTypeDeclaration> typeAccessedStatically = JavaParserFactory.getContext(fieldAccessExpr, typeSolver).solveType(staticValue.toString(), typeSolver);
SymbolReference<TypeDeclaration> typeAccessedStatically = JavaParserFactory.getContext(fieldAccessExpr, typeSolver).solveType(staticValue.toString(), typeSolver);
if (typeAccessedStatically.isSolved()) {
// TODO here maybe we have to substitute type typeParametersValues
return typeAccessedStatically.getCorrespondingDeclaration().getField(fieldAccessExpr.getField()).getType();
return ((ReferenceTypeDeclaration)typeAccessedStatically.getCorrespondingDeclaration()).getField(fieldAccessExpr.getField()).getType();
}
}
Optional<Value> value = new SymbolSolver(typeSolver).solveSymbolAsValue(fieldAccessExpr.getField(), fieldAccessExpr);
Expand Down Expand Up @@ -591,11 +591,11 @@ public Type convertToUsage(com.github.javaparser.ast.type.Type type, Context con
if (type instanceof ClassOrInterfaceType) {
ClassOrInterfaceType classOrInterfaceType = (ClassOrInterfaceType) type;
String name = qName(classOrInterfaceType);
SymbolReference<ReferenceTypeDeclaration> ref = context.solveType(name, typeSolver);
SymbolReference<TypeDeclaration> ref = context.solveType(name, typeSolver);
if (!ref.isSolved()) {
throw new UnsolvedSymbolException(name);
}
ReferenceTypeDeclaration typeDeclaration = ref.getCorrespondingDeclaration();
TypeDeclaration typeDeclaration = ref.getCorrespondingDeclaration();
List<Type> typeParameters = Collections.emptyList();
if (classOrInterfaceType.getTypeArguments().isPresent()) {
typeParameters = classOrInterfaceType.getTypeArguments().get().stream().map((pt) -> convertToUsage(pt, context)).collect(Collectors.toList());
Expand All @@ -608,7 +608,7 @@ public Type convertToUsage(com.github.javaparser.ast.type.Type type, Context con
return new TypeVariable(javaParserTypeVariableDeclaration.asTypeParameter());
}
} else {
return new ReferenceTypeImpl(typeDeclaration, typeParameters, typeSolver);
return new ReferenceTypeImpl((ReferenceTypeDeclaration) typeDeclaration, typeParameters, typeSolver);
}
} else if (type instanceof com.github.javaparser.ast.type.PrimitiveType) {
return PrimitiveType.byName(((com.github.javaparser.ast.type.PrimitiveType) type).getType().name());
Expand Down
Expand Up @@ -129,7 +129,7 @@ public Optional<Type> solveGenericType(String name, TypeSolver typeSolver) {
}

@Override
public SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
return javaParserTypeDeclarationAdapter.solveType(name, typeSolver);
}

Expand All @@ -155,7 +155,7 @@ public SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> ar
throw new UnsupportedOperationException();
}
String superclassName = this.wrappedNode.getExtends().get(0).getName();
SymbolReference<ReferenceTypeDeclaration> superclass = solveType(superclassName, typeSolver);
SymbolReference<TypeDeclaration> superclass = solveType(superclassName, typeSolver);
if (!superclass.isSolved()) {
throw new UnsolvedSymbolException(this, superclassName);
}
Expand All @@ -165,7 +165,7 @@ public SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> ar
}
} else {
String superclassName = "java.lang.Object";
SymbolReference<ReferenceTypeDeclaration> superclass = solveType(superclassName, typeSolver);
SymbolReference<TypeDeclaration> superclass = solveType(superclassName, typeSolver);
if (!superclass.isSolved()) {
throw new UnsolvedSymbolException(this, superclassName);
}
Expand All @@ -178,7 +178,7 @@ public SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> ar
// Consider only default methods from interfaces
for (ClassOrInterfaceType implemented : this.wrappedNode.getImplements()) {
String interfaceClassName = implemented.getName();
SymbolReference<ReferenceTypeDeclaration> superclass = solveType(interfaceClassName, typeSolver);
SymbolReference<TypeDeclaration> superclass = solveType(interfaceClassName, typeSolver);
if (!superclass.isSolved()) {
throw new UnsolvedSymbolException(this, interfaceClassName);
}
Expand Down
Expand Up @@ -66,7 +66,7 @@ public SymbolReference<? extends ValueDeclaration> solveSymbol(String name, Type
while (itName.contains(".")) {
String typeName = getType(itName);
String memberName = getMember(itName);
SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> type = this.solveType(typeName, typeSolver);
SymbolReference<com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration> type = this.solveType(typeName, typeSolver);
if (type.isSolved()) {
return new SymbolSolver(typeSolver).solveSymbolInType(type.getCorrespondingDeclaration(), memberName);
} else {
Expand Down Expand Up @@ -104,7 +104,7 @@ public SymbolReference<? extends ValueDeclaration> solveSymbol(String name, Type
}

@Override
public SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
if (wrappedNode.getTypes() != null) {
for (TypeDeclaration type : wrappedNode.getTypes()) {
if (type.getName().equals(name)) {
Expand All @@ -129,15 +129,15 @@ public SymbolReference<com.github.javaparser.symbolsolver.model.declarations.Ref
if (qName.equals(name) || qName.endsWith("." + name)) {
SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> ref = typeSolver.tryToSolveType(qName);
if (ref.isSolved()) {
return ref;
return SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class);
}
}
} else if (importDecl instanceof TypeImportOnDemandDeclaration) {
String packageName = ((TypeImportOnDemandDeclaration) importDecl).getName().getQualifiedName();
String qName = packageName + "." + name;
SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> ref = typeSolver.tryToSolveType(qName);
if (ref.isSolved()) {
return ref;
return SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class);
}
}
}
Expand All @@ -148,19 +148,19 @@ public SymbolReference<com.github.javaparser.symbolsolver.model.declarations.Ref
String qName = this.wrappedNode.getPackage().get().getName().toString() + "." + name;
SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> ref = typeSolver.tryToSolveType(qName);
if (ref.isSolved()) {
return ref;
return SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class);
}
}

// Look in the java.lang package
SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> ref = typeSolver.tryToSolveType("java.lang." + name);
if (ref.isSolved()) {
return ref;
return SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class);
}

// DO NOT look for absolute name if this name is not qualified: you cannot import classes from the default package
if (isQualifiedName(name)) {
return typeSolver.tryToSolveType(name);
return SymbolReference.adapt(typeSolver.tryToSolveType(name), com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class);
} else {
return SymbolReference.unsolved(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.class);
}
Expand Down
Expand Up @@ -21,7 +21,7 @@
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
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.TypeSolver;
Expand Down Expand Up @@ -89,7 +89,7 @@ public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) {
}

@Override
public SymbolReference<ReferenceTypeDeclaration> solveType(
public SymbolReference<TypeDeclaration> solveType(
String name, TypeSolver typeSolver) {
if (wrappedNode.getTypeParameters() != null) {
for (com.github.javaparser.ast.type.TypeParameter tp : wrappedNode.getTypeParameters()) {
Expand Down
Expand Up @@ -72,7 +72,7 @@ public SymbolReference<? extends ValueDeclaration> solveSymbol(String name, Type
}

@Override
public SymbolReference<com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
return javaParserTypeDeclarationAdapter.solveType(name, typeSolver);
}

Expand Down
Expand Up @@ -22,7 +22,7 @@
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
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.TypeSolver;
Expand Down Expand Up @@ -56,7 +56,7 @@ public SymbolReference<? extends ValueDeclaration> solveSymbol(String name, Type
}

@Override
public SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
return JavaParserFactory.getContext(getParentNode(wrappedNode), typeSolver).solveType(name, typeSolver);
}

Expand Down
Expand Up @@ -3,7 +3,6 @@
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
Expand All @@ -24,7 +23,7 @@ public JavaParserTypeDeclarationAdapter(com.github.javaparser.ast.body.TypeDecla
this.context = context;
}

public SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
if (this.wrappedNode.getName().equals(name)) {
return SymbolReference.solved(JavaParserFacade.get(typeSolver).getTypeDeclaration(wrappedNode));
}
Expand Down
Expand Up @@ -134,7 +134,7 @@ public SymbolReference<? extends ValueDeclaration> solveSymbol(String name, Type
}

@Override
public SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
return getParent().solveType(name, typeSolver);
}

Expand Down
Expand Up @@ -259,7 +259,7 @@ public Optional<MethodUsage> solveMethodAsUsage(String name, List<Type> argument

if (wrappedNode.getScope().get() instanceof NameExpr) {
String className = ((NameExpr) wrappedNode.getScope().get()).getName();
SymbolReference<ReferenceTypeDeclaration> ref = solveType(className, typeSolver);
SymbolReference<TypeDeclaration> ref = solveType(className, typeSolver);
if (ref.isSolved()) {
SymbolReference<MethodDeclaration> m = MethodResolutionLogic.solveMethodInType(ref.getCorrespondingDeclaration(), name, argumentsTypes, typeSolver);
if (m.isSolved()) {
Expand Down
Expand Up @@ -21,7 +21,7 @@
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter;
import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
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.TypeSolver;
Expand Down Expand Up @@ -79,7 +79,7 @@ public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) {
}

@Override
public SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
if (wrappedNode.getTypeParameters() != null) {
for (com.github.javaparser.ast.type.TypeParameter tp : wrappedNode.getTypeParameters()) {
if (tp.getName().equals(name)) {
Expand Down
Expand Up @@ -23,7 +23,7 @@
import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
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.TypeSolver;
Expand Down Expand Up @@ -149,7 +149,7 @@ public SymbolReference<MethodDeclaration> solveMethod(String name, List<Type> ar
}

@Override
public SymbolReference<ReferenceTypeDeclaration> solveType(String name, TypeSolver typeSolver) {
public SymbolReference<TypeDeclaration> solveType(String name, TypeSolver typeSolver) {
return getParent().solveType(name, typeSolver);
}
}

0 comments on commit a1c7c58

Please sign in to comment.