From f276accc32db02896cffc324f55130560df3c282 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 8 Mar 2016 11:14:15 +0000 Subject: Use TypeName in FormalTypeParameterNode --- src/main/java/org/zwobble/couscous/ast/ClassNode.java | 3 +-- .../org/zwobble/couscous/ast/FormalTypeParameterNode.java | 11 ++++++++--- src/main/java/org/zwobble/couscous/ast/InterfaceNode.java | 3 +-- .../org/zwobble/couscous/ast/visitors/NodeTransformer.java | 8 ++++++++ .../java/org/zwobble/couscous/frontends/java/JavaReader.java | 2 +- .../couscous/tests/frontends/java/JavaReaderTests.java | 4 ++-- 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java index 745fb64..2342315 100644 --- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java @@ -97,8 +97,7 @@ public class ClassNode implements TypeNode { public ClassNode transform(NodeTransformer transformer) { return new ClassNode( transformer.transform(name), - // TODO: transform - typeParameters, + transformer.transformFormalTypeParameters(typeParameters), transformer.transformTypes(superTypes), transformer.transformFields(fields), // TODO: transform diff --git a/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java b/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java index 4056548..9de6e5d 100644 --- a/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java +++ b/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java @@ -1,18 +1,23 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.NodeMapper; +import org.zwobble.couscous.ast.visitors.NodeTransformer; public class FormalTypeParameterNode implements Node { - public static FormalTypeParameterNode formalTypeParameter(String name) { + public static FormalTypeParameterNode formalTypeParameter(TypeName name) { return new FormalTypeParameterNode(name); } - private final String name; + private final TypeName name; - public FormalTypeParameterNode(String name) { + public FormalTypeParameterNode(TypeName name) { this.name = name; } + public FormalTypeParameterNode transform(NodeTransformer transformer) { + return new FormalTypeParameterNode(transformer.transform(name)); + } + @Override public T accept(NodeMapper visitor) { throw new UnsupportedOperationException(); diff --git a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java index 6353a45..e5b876d 100644 --- a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java +++ b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java @@ -72,8 +72,7 @@ public class InterfaceNode implements TypeNode { public InterfaceNode transform(NodeTransformer transformer) { return new InterfaceNode( transformer.transform(name), - // TODO: transform - typeParameters, + transformer.transformFormalTypeParameters(typeParameters), transformer.transformTypes(superTypes), transformer.transformMethods(methods)); } diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java index 5e4d90d..5d0539a 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java @@ -220,6 +220,10 @@ public class NodeTransformer { return statement.transform(this); } + public FormalTypeParameterNode transformFormalTypeParameter(FormalTypeParameterNode typeParameter) { + return typeParameter.transform(this); + } + public FormalArgumentNode transformFormalArgument(FormalArgumentNode formalArgumentNode) { return formalArgumentNode.transform(this); } @@ -272,6 +276,10 @@ public class NodeTransformer { return transformList(expressions, this::transformExpression); } + public List transformFormalTypeParameters(List typeParameters) { + return transformList(typeParameters, this::transformFormalTypeParameter); + } + public List transformFormalArguments(List arguments) { return transformList(arguments, this::transformFormalArgument); } 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 73cf749..7f9d528 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -104,7 +104,7 @@ public class JavaReader { private List readTypeParameters(TypeDeclaration typeDeclaration) { return eagerMap( asList(typeDeclaration.resolveBinding().getTypeParameters()), - parameter -> formalTypeParameter(parameter.getName())); + parameter -> formalTypeParameter(TypeName.of(parameter.getName()))); } GeneratedClosure readExpressionMethodReference(Scope outerScope, ExpressionMethodReference expression) { diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index 4694f85..f5692f2 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -323,7 +323,7 @@ public class JavaReaderTests { assertThat(classes, hasSize(1)); ClassNode classNode = (ClassNode) classes.get(0); assertEquals(TypeName.of("com.example.Example"), classNode.getName()); - assertEquals(list(formalTypeParameter("T")), classNode.getTypeParameters()); + assertEquals(list(formalTypeParameter(TypeName.of("T"))), classNode.getTypeParameters()); } @Test @@ -334,7 +334,7 @@ public class JavaReaderTests { assertThat(classes, hasSize(1)); InterfaceNode classNode = (InterfaceNode) classes.get(0); assertEquals(TypeName.of("com.example.Example"), classNode.getName()); - assertEquals(list(formalTypeParameter("T")), classNode.getTypeParameters()); + assertEquals(list(formalTypeParameter(TypeName.of("T"))), classNode.getTypeParameters()); } @Test -- cgit v1.2.3