diff options
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
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())) ))); }); |
