diff options
author | Éamonn McManus <eamonn@mcmanus.net> | 2015-09-14 15:41:43 -0700 |
---|---|---|
committer | jwilson <jwilson@squareup.com> | 2015-09-14 21:12:24 -0400 |
commit | 6551850b3eaa4f5ff4b6ce6a2b2102d281a11fee (patch) | |
tree | 22fe84a3160966c6e845d73b5d5fd2b1cf76eca7 /src/main/java/com/squareup/javapoet/WildcardTypeName.java | |
parent | 99739456865136a6c294989a5a3e66f20fa5991a (diff) | |
download | javapoet-6551850b3eaa4f5ff4b6ce6a2b2102d281a11fee.tar.gz |
Add logic to avoid infinite recursion in TypeName.get(TypeMirror) when the TypeMirror includes a recursive type bound.
Diffstat (limited to 'src/main/java/com/squareup/javapoet/WildcardTypeName.java')
-rw-r--r-- | src/main/java/com/squareup/javapoet/WildcardTypeName.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/java/com/squareup/javapoet/WildcardTypeName.java b/src/main/java/com/squareup/javapoet/WildcardTypeName.java index 711b278..5e55fbb 100644 --- a/src/main/java/com/squareup/javapoet/WildcardTypeName.java +++ b/src/main/java/com/squareup/javapoet/WildcardTypeName.java @@ -20,7 +20,10 @@ import java.lang.reflect.Type; import java.lang.reflect.WildcardType; import java.util.Arrays; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import javax.lang.model.element.TypeParameterElement; import javax.lang.model.type.TypeMirror; import static com.squareup.javapoet.Util.checkArgument; @@ -90,16 +93,22 @@ public final class WildcardTypeName extends TypeName { } public static TypeName get(javax.lang.model.type.WildcardType mirror) { + return get(mirror, new LinkedHashMap<TypeParameterElement, TypeVariableName>()); + } + + static TypeName get( + javax.lang.model.type.WildcardType mirror, + Map<TypeParameterElement, TypeVariableName> typeVariables) { TypeMirror extendsBound = mirror.getExtendsBound(); if (extendsBound == null) { TypeMirror superBound = mirror.getSuperBound(); if (superBound == null) { return subtypeOf(Object.class); } else { - return supertypeOf(TypeName.get(superBound)); + return supertypeOf(TypeName.get(superBound, typeVariables)); } } else { - return subtypeOf(TypeName.get(extendsBound)); + return subtypeOf(TypeName.get(extendsBound, typeVariables)); } } |