Skip to content

Commit

Permalink
fix #1857
Browse files Browse the repository at this point in the history
  • Loading branch information
izebit committed Sep 17, 2018
1 parent cf34362 commit c399d91
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
Expand Up @@ -64,6 +64,14 @@ public static ResolvedType byName(String name) {
throw new IllegalArgumentException("Name " + name); throw new IllegalArgumentException("Name " + name);
} }


public static boolean isPrimitive(String name){
for (ResolvedPrimitiveType type : values()) {
if(type.name.equals(name))
return true;
}
return false;
}

@Override @Override
public String toString() { public String toString() {
return "PrimitiveTypeUsage{" + return "PrimitiveTypeUsage{" +
Expand Down
Expand Up @@ -16,6 +16,7 @@


package com.github.javaparser.symbolsolver.javassistmodel; package com.github.javaparser.symbolsolver.javassistmodel;


import com.github.javaparser.ast.type.PrimitiveType;
import com.github.javaparser.resolution.MethodUsage; import com.github.javaparser.resolution.MethodUsage;
import com.github.javaparser.resolution.UnsolvedSymbolException; import com.github.javaparser.resolution.UnsolvedSymbolException;
import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration; import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration;
Expand Down Expand Up @@ -176,18 +177,26 @@ static String internalNameToCanonicalName(String typeName) {
} }


private static ResolvedType objectTypeArgumentToType(SignatureAttribute.ObjectType typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { private static ResolvedType objectTypeArgumentToType(SignatureAttribute.ObjectType typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) {
String typeName = typeArgument.jvmTypeName(); if(typeArgument instanceof SignatureAttribute.ArrayType){
Optional<ResolvedType> type = getGenericParameterByName(typeName, typeParametrizable); String baseTypeName = ((SignatureAttribute.ArrayType) typeArgument).getComponentType().jvmTypeName();
ResolvedType baseType = getGenericParameterByName(baseTypeName, typeParametrizable, typeSolver);
return new ResolvedArrayType(baseType);
} else {
String typeName = typeArgument.jvmTypeName();
return getGenericParameterByName(typeName, typeParametrizable, typeSolver);
}
}

private static ResolvedType getGenericParameterByName(String typeName, ResolvedTypeParametrizable typeParametrizable, TypeSolver typeSolver) {
if(ResolvedPrimitiveType.isPrimitive(typeName))
return ResolvedPrimitiveType.byName(typeName);

Optional<ResolvedType> type = typeParametrizable.findTypeParameter(typeName).map(ResolvedTypeVariable::new);
return type.orElseGet(() -> new ReferenceTypeImpl( return type.orElseGet(() -> new ReferenceTypeImpl(
typeSolver.solveType(removeTypeArguments(internalNameToCanonicalName(typeName))), typeSolver.solveType(removeTypeArguments(internalNameToCanonicalName(typeName))),
typeSolver)); typeSolver));
} }


private static Optional<ResolvedType> getGenericParameterByName(String typeName, ResolvedTypeParametrizable typeParametrizable) {
Optional<ResolvedTypeParameterDeclaration> tp = typeParametrizable.findTypeParameter(typeName);
return tp.map(ResolvedTypeVariable::new);
}

private static ResolvedType typeArgumentToType(SignatureAttribute.TypeArgument typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { private static ResolvedType typeArgumentToType(SignatureAttribute.TypeArgument typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) {
if (typeArgument.isWildcard()) { if (typeArgument.isWildcard()) {
if (typeArgument.getType() == null) { if (typeArgument.getType() == null) {
Expand Down

0 comments on commit c399d91

Please sign in to comment.