diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-03 10:44:34 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-03 10:44:34 +0100 |
| commit | b6ed1339fa3e469b80d4c15d44ff146db5922294 (patch) | |
| tree | 6223714f4f760e0b99dabcd09c89e2c3186b3c03 | |
| parent | c6f690724da284c8065319252bf79eb166a168c8 (diff) | |
Improve generic type handling
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java index dcb3eb9..9bf27d9 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java @@ -39,21 +39,20 @@ public class JavaTypes { return Types.array(typeOf(typeBinding.getElementType())); } ITypeBinding outerClass = typeBinding.getDeclaringClass(); - if (outerClass == null) { - ScalarType rawType = ScalarType.of(typeBinding.getErasure().getQualifiedName()); - if (typeBinding.isParameterizedType()) { - List<Type> typeParameters = eagerMap( - asList(typeBinding.getTypeArguments()), - JavaTypes::typeOf); - return new ParameterizedType(rawType, typeParameters); - } else { - return rawType; - } - } else if (typeBinding.isTypeVariable()) { + if (typeBinding.isTypeVariable() && outerClass != null) { return new TypeParameter(erasure(typeOf(outerClass)), typeBinding.getName()); - } else { + } + ScalarType rawType = outerClass == null + ? ScalarType.of(typeBinding.getErasure().getQualifiedName()) // TODO: test for erasure of inner type name - return ScalarType.of(erasure(typeOf(outerClass)).getQualifiedName() + "__" + typeBinding.getErasure().getName()); + : ScalarType.of(erasure(typeOf(outerClass)).getQualifiedName() + "__" + typeBinding.getErasure().getName()); + if (typeBinding.isParameterizedType()) { + List<Type> typeParameters = eagerMap( + asList(typeBinding.getTypeArguments()), + JavaTypes::typeOf); + return new ParameterizedType(rawType, typeParameters); + } else { + return rawType; } } |
