Skip to content

Commit

Permalink
simplify TypeUsage
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Oct 30, 2015
1 parent 392bb1e commit fb0467d
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 24 deletions.
21 changes: 20 additions & 1 deletion src/main/java/me/tomassetti/symbolsolver/JavaParserFacade.java
Expand Up @@ -118,6 +118,25 @@ public TypeUsage getType(Node node, boolean solveLambdas) {
}
}

private static TypeUsage solveGenericTypes(TypeUsage typeUsage, Context context, TypeSolver typeSolver) {
if (typeUsage.isTypeVariable()) {
Optional<TypeUsage> solved = context.solveGenericType(typeUsage.describe(), typeSolver);
if (solved.isPresent()) {
return solved.get();
} else {
throw new UnsolvedSymbolException(context, typeUsage.describe());
}
} else {
TypeUsage result = typeUsage;
int i=0;
for (TypeUsage tp : typeUsage.parameters()) {
result = result.asReferenceTypeUsage().replaceParam(i, solveGenericTypes(tp, context, typeSolver));
i++;
}
return result;
}
}

/**
* Should return more like a TypeApplication: a TypeDeclaration and possible parameters or array modifiers.
* @return
Expand Down Expand Up @@ -154,7 +173,7 @@ private TypeUsage getTypeConcrete(Node node, boolean solveLambdas) {
if (solveLambdas) {
TypeUsage result = refMethod.getCorrespondingDeclaration().getParam(pos).getType(typeSolver);
// We need to replace the type variables
result = result.solveGenericTypes(JavaParserFactory.getContext(node), typeSolver);
result = solveGenericTypes(result, JavaParserFactory.getContext(node), typeSolver);
return result;
} else {
return refMethod.getCorrespondingDeclaration().getParam(pos).getType(typeSolver);
Expand Down
Expand Up @@ -92,29 +92,6 @@ default TypeUsage replaceParam(String name, TypeUsage replaced) {
return this;
}

default Optional<TypeUsage> solveGenericType(String name) {
throw new UnsupportedOperationException(this.getClass().getCanonicalName());
}

default TypeUsage solveGenericTypes(Context context, TypeSolver typeSolver) {
if (isTypeVariable()) {
Optional<TypeUsage> solved = context.solveGenericType(describe(), typeSolver);
if (solved.isPresent()) {
return solved.get();
} else {
throw new UnsolvedSymbolException(context, describe());
}
} else {
TypeUsage result = this;
int i=0;
for (TypeUsage tp : this.parameters()) {
result = result.asReferenceTypeUsage().replaceParam(i, tp.solveGenericTypes(context, typeSolver));
i++;
}
return result;
}
}

List<TypeUsage> parameters();

///
Expand Down

0 comments on commit fb0467d

Please sign in to comment.