diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-08 11:01:29 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-08 11:01:29 +0000 |
| commit | 95669601271985c89a10d673571dd89133f1e2e8 (patch) | |
| tree | 866d294696522f721cab97b8a1fb020945cf1d75 /src/main/java/org/zwobble/couscous/frontends | |
| parent | c532706e0f20a07be960e4d2ca4d89d850312174 (diff) | |
Read formal type parameters
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 13 |
1 files changed, 12 insertions, 1 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 a071127..73cf749 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -25,6 +25,7 @@ import static org.zwobble.couscous.ast.AssignmentNode.assignStatement; import static org.zwobble.couscous.ast.ConstructorNode.constructor; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FieldDeclarationNode.field; +import static org.zwobble.couscous.ast.FormalTypeParameterNode.formalTypeParameter; import static org.zwobble.couscous.ast.InstanceReceiver.instanceReceiver; import static org.zwobble.couscous.ast.StaticReceiver.staticReceiver; import static org.zwobble.couscous.ast.ThisReferenceNode.thisReference; @@ -82,14 +83,16 @@ public class JavaReader { private TypeNode readTypeDeclaration(TypeDeclaration type) { TypeName name = typeOf(type.resolveBinding()); Scope scope = topScope.enterClass(name); + List<FormalTypeParameterNode> typeParameters = readTypeParameters(type); TypeDeclarationBody body = readTypeDeclarationBody(scope, name, type.bodyDeclarations()); Set<TypeName> superTypes = superTypes(type); if (type.isInterface()) { // TODO: throw exception if other parts of body are declared - return InterfaceNode.declareInterface(name, superTypes, body.getMethods()); + return InterfaceNode.declareInterface(name, typeParameters, superTypes, body.getMethods()); } else { return ClassNode.declareClass( name, + typeParameters, superTypes, body.getFields(), body.getStaticConstructor(), @@ -98,6 +101,12 @@ public class JavaReader { } } + private List<FormalTypeParameterNode> readTypeParameters(TypeDeclaration typeDeclaration) { + return eagerMap( + asList(typeDeclaration.resolveBinding().getTypeParameters()), + parameter -> formalTypeParameter(parameter.getName())); + } + GeneratedClosure readExpressionMethodReference(Scope outerScope, ExpressionMethodReference expression) { return readLambda( outerScope, @@ -226,6 +235,7 @@ public class JavaReader { ClassNode generatedClass = new ClassNode( classNode.getName(), + classNode.getTypeParameters(), classNode.getSuperTypes(), fields, list(), @@ -248,6 +258,7 @@ public class JavaReader { ) { return classWithCapture(scope, ClassNode.declareClass( className, + list(), anonymousClass.getSuperTypes(), anonymousClass.getFields(), list(), |
