aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-04 22:42:15 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-05 22:28:43 +0100
commit63fc003231e92e8f5ea2af29a04ba5507c212325 (patch)
treeaa75d120c99570340402f06edffb9acc357f8394 /src/main/java/org/zwobble/couscous/frontends
parent449c10917348eee52c2d769eb5f6fb7f8ec836b9 (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.java9
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java7
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