diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-04 22:42:15 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-05 22:28:43 +0100 |
| commit | 63fc003231e92e8f5ea2af29a04ba5507c212325 (patch) | |
| tree | aa75d120c99570340402f06edffb9acc357f8394 /src/main/java/org/zwobble/couscous/frontends | |
| parent | 449c10917348eee52c2d769eb5f6fb7f8ec836b9 (diff) | |
Partial support for reading type parameters for methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 9 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java | 7 |
2 files changed, 13 insertions, 3 deletions
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<FormalTypeParameterNode> readTypeParameters(TypeDeclaration typeDeclaration) { + return readTypeParameters(typeDeclaration.resolveBinding().getTypeParameters()); + } + + private List<FormalTypeParameterNode> 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 |
