aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-17 22:33:15 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-18 08:00:10 +0000
commitcea82209e5aa312f4a513308c148d3e944004cb4 (patch)
tree6f7e5fa7bb1656b4650bb227866195f35bc962e0 /src/main/java/org/zwobble/couscous/frontends
parent5687fd7f88485f95e970b3d93fbf2800e84eb3b8 (diff)
Improve support for generics
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java5
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java15
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java2
3 files changed, 14 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
index 096162f..46d2ab4 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
@@ -185,7 +185,6 @@ public class JavaExpressionReader {
expression.resolveMethodBinding(),
expression.arguments());
MethodSignature signature = JavaMethods.signature(expression.resolveMethodBinding());
- final Type type = signature.getReturnType();
IMethodBinding methodBinding = expression.resolveMethodBinding();
Type receiverType = typeOf(methodBinding.getDeclaringClass());
@@ -194,7 +193,7 @@ public class JavaExpressionReader {
Types.erasure(receiverType),
methodName,
arguments,
- type);
+ signature);
} else {
ExpressionNode receiver = expression.getExpression() == null
? ThisReferenceNode.thisReference(receiverType)
@@ -203,7 +202,7 @@ public class JavaExpressionReader {
receiver,
methodName,
arguments,
- type);
+ signature);
}
}
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
index 42211fe..0273faa 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
@@ -34,10 +34,17 @@ class JavaMethods {
eagerMap(
argumentTypes,
asList(erasedMethod.getParameterTypes()),
- (argumentType, erasedParameterType) -> new BoundTypeParameter((TypeParameter) typeOf(erasedParameterType), argumentType)),
- new BoundTypeParameter(
- (TypeParameter) typeOf(erasedMethod.getReturnType()),
- returnType));
+ (argumentType, erasedParameterType) -> typeParameterForGeneric(erasedParameterType, argumentType)),
+ typeParameterForGeneric(erasedMethod.getReturnType(), returnType));
+ }
+ }
+
+ private static Type typeParameterForGeneric(ITypeBinding erasedTypeBinding, Type type) {
+ Type erasedType = typeOf(erasedTypeBinding);
+ if (erasedType.equals(type)) {
+ return type;
+ } else {
+ return new BoundTypeParameter((TypeParameter) typeOf(erasedTypeBinding), type);
}
}
}
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index 4afe02b..42d8f28 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -417,7 +417,7 @@ public class JavaReader {
thisReference(type),
methodNode.getName(),
eagerMap(arguments, argument -> reference(argument)),
- methodNode.getReturnType()),
+ methodNode.signature()),
override.getReturnType()))
)));
});