aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/squareup/javapoet/WildcardTypeName.java
diff options
context:
space:
mode:
authorÉamonn McManus <eamonn@mcmanus.net>2015-09-14 15:41:43 -0700
committerjwilson <jwilson@squareup.com>2015-09-14 21:12:24 -0400
commit6551850b3eaa4f5ff4b6ce6a2b2102d281a11fee (patch)
tree22fe84a3160966c6e845d73b5d5fd2b1cf76eca7 /src/main/java/com/squareup/javapoet/WildcardTypeName.java
parent99739456865136a6c294989a5a3e66f20fa5991a (diff)
downloadjavapoet-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.java13
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));
}
}