From 63fc003231e92e8f5ea2af29a04ba5507c212325 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 4 Apr 2016 22:42:15 +0100 Subject: Partial support for reading type parameters for methods --- .../java/org/zwobble/couscous/frontends/java/JavaReader.java | 9 ++++++++- src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java | 7 +++++-- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/frontends') 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 d4366c2..063ffc6 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -117,8 +117,12 @@ public class JavaReader { } private List readTypeParameters(TypeDeclaration typeDeclaration) { + return readTypeParameters(typeDeclaration.resolveBinding().getTypeParameters()); + } + + private List readTypeParameters(ITypeBinding[] typeParameters) { return eagerMap( - asList(typeDeclaration.resolveBinding().getTypeParameters()), + asList(typeParameters), parameter -> formalTypeParameter(parameter.getName())); } @@ -156,6 +160,8 @@ public class JavaReader { emptyList(), false, functionalInterfaceMethod.getName(), + // TODO: should get formal type parameters from the lambda + list(), lambda.getFormalArguments(), typeOf(functionalInterfaceMethod.getReturnType()), Optional.of(lambda.getBody()), @@ -414,6 +420,7 @@ public class JavaReader { annotations, isStatic, methodName, + readTypeParameters(method.resolveBinding().getTypeParameters()), formalArguments, returnType.get(), body, 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 d63ec89..3b7a472 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java @@ -41,8 +41,11 @@ public class JavaTypes { return Types.array(typeOf(typeBinding.getElementType())); } ITypeBinding outerClass = typeBinding.getDeclaringClass(); - // TODO: handle type variables for methods - if (typeBinding.isTypeVariable() && outerClass != null) { + if (typeBinding.isTypeVariable()) { + if (outerClass == null) { + // TODO: handle type variables for methods properly + outerClass = typeBinding.getDeclaringMethod().getDeclaringClass(); + } return new TypeParameter(erasure(typeOf(outerClass)), typeBinding.getName()); } ScalarType rawType = outerClass == null -- cgit v1.2.3