aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AnnotationNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ArrayNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AssignmentNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/CastNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/EnumNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/IfStatementNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InterfaceNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LiteralNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Node.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/OperationNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Receiver.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ReturnNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StatementNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StaticReceiver.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ThrowNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TryNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TypeNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/WhileNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/sugar/SwitchNode.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java45
39 files changed, 72 insertions, 51 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java b/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
index 7cba234..ab7b05a 100644
--- a/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
@@ -29,7 +29,7 @@ public class AnnotationNode implements Node {
return ExtraIterables.empty();
}
- public AnnotationNode transform(NodeTransformer transformer) {
+ public AnnotationNode transformSubtree(NodeTransformer transformer) {
return new AnnotationNode(transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ArrayNode.java b/src/main/java/org/zwobble/couscous/ast/ArrayNode.java
index 784cb69..804f051 100644
--- a/src/main/java/org/zwobble/couscous/ast/ArrayNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ArrayNode.java
@@ -43,7 +43,7 @@ public class ArrayNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new ArrayNode(
transformer.transform(elementType),
transformer.transformExpressions(elements));
diff --git a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
index e12c5dd..89f09a8 100644
--- a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
@@ -51,7 +51,7 @@ public class AssignmentNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new AssignmentNode(
(AssignableExpressionNode) transformer.transformExpression(target),
transformer.transformExpression(value));
diff --git a/src/main/java/org/zwobble/couscous/ast/CastNode.java b/src/main/java/org/zwobble/couscous/ast/CastNode.java
index 02b2626..ef9af52 100644
--- a/src/main/java/org/zwobble/couscous/ast/CastNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/CastNode.java
@@ -37,7 +37,7 @@ public class CastNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new CastNode(transformer.transformExpression(expression), transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
index 80f3d38..4585ad6 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
@@ -106,7 +106,7 @@ public class ClassNode implements TypeNode {
}
@Override
- public ClassNode transform(NodeTransformer transformer) {
+ public ClassNode transformSubtree(NodeTransformer transformer) {
return new ClassNode(
transformer.transform(name),
transformer.transformFormalTypeParameters(typeParameters),
diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
index 2f9c44e..715c34a 100644
--- a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
@@ -44,7 +44,7 @@ public class ConstructorCallNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new ConstructorCallNode(
transformer.transform(type),
transformer.transformExpressions(arguments));
diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java
index 5b49659..a7843eb 100644
--- a/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java
@@ -43,7 +43,7 @@ public class ConstructorNode implements Node {
return Iterables.concat(arguments, body);
}
- public ConstructorNode transform(NodeTransformer transformer) {
+ public ConstructorNode transformSubtree(NodeTransformer transformer) {
return new ConstructorNode(
transformer.transformFormalArguments(arguments),
transformer.transformStatements(body));
diff --git a/src/main/java/org/zwobble/couscous/ast/EnumNode.java b/src/main/java/org/zwobble/couscous/ast/EnumNode.java
index f207618..35200ce 100644
--- a/src/main/java/org/zwobble/couscous/ast/EnumNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/EnumNode.java
@@ -60,7 +60,7 @@ public class EnumNode implements TypeNode {
}
@Override
- public TypeNode transform(NodeTransformer transformer) {
+ public TypeNode transformSubtree(NodeTransformer transformer) {
return new EnumNode(
transformer.transform(name),
eagerMap(values, transformer::transformFieldName));
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
index 4a588d1..295a51a 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
@@ -5,5 +5,5 @@ import org.zwobble.couscous.types.Type;
public interface ExpressionNode extends Node {
Type getType();
- ExpressionNode transform(NodeTransformer transformer);
+ ExpressionNode transformSubtree(NodeTransformer transformer);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
index 462d2aa..5c4aaaf 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
@@ -29,7 +29,7 @@ public class ExpressionStatementNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new ExpressionStatementNode(transformer.transformExpression(expression));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
index f3470ee..0bb8ffe 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
@@ -70,7 +70,7 @@ public class FieldAccessNode implements AssignableExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new FieldAccessNode(
transformer.transformReceiver(left),
transformer.transformFieldName(fieldName),
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
index 3e23ec9..f6fe1b3 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
@@ -49,7 +49,7 @@ public class FieldDeclarationNode implements Node {
return ExtraIterables.empty();
}
- public FieldDeclarationNode transform(NodeTransformer transformer) {
+ public FieldDeclarationNode transformSubtree(NodeTransformer transformer) {
return new FieldDeclarationNode(
isStatic,
transformer.transformFieldName(name),
diff --git a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
index f1d28c1..797c875 100644
--- a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
@@ -37,7 +37,7 @@ public class FormalArgumentNode implements VariableNode, Node {
return ExtraIterables.empty();
}
- public FormalArgumentNode transform(NodeTransformer transformer) {
+ public FormalArgumentNode transformSubtree(NodeTransformer transformer) {
return new FormalArgumentNode(transformer.transform(declaration));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java b/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java
index f7d1609..f4fd8f9 100644
--- a/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java
@@ -38,7 +38,7 @@ public class FormalTypeParameterNode implements Node {
return ExtraIterables.empty();
}
- public FormalTypeParameterNode transform(NodeTransformer transformer) {
+ public FormalTypeParameterNode transformSubtree(NodeTransformer transformer) {
return new FormalTypeParameterNode(transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java b/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
index 66a2b60..d164939 100644
--- a/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
@@ -50,7 +50,7 @@ public class IfStatementNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new IfStatementNode(
transformer.transformExpression(condition),
transformer.transformStatements(trueBranch),
diff --git a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
index ea4200d..e47490f 100644
--- a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
@@ -39,7 +39,7 @@ public class InstanceOfNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new InstanceOfNode(
transformer.transformExpression(left),
transformer.transform(right));
diff --git a/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java b/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java
index 413c06c..6227131 100644
--- a/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java
+++ b/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java
@@ -34,7 +34,7 @@ public class InstanceReceiver implements Receiver {
}
@Override
- public Receiver transform(NodeTransformer transformer) {
+ public Receiver transformSubtree(NodeTransformer transformer) {
return new InstanceReceiver(transformer.transformExpression(expression));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
index cba6d38..8af21c7 100644
--- a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
@@ -75,7 +75,7 @@ public class InterfaceNode implements TypeNode {
}
@Override
- public InterfaceNode transform(NodeTransformer transformer) {
+ public InterfaceNode transformSubtree(NodeTransformer transformer) {
return new InterfaceNode(
transformer.transform(name),
transformer.transformFormalTypeParameters(typeParameters),
diff --git a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
index 1c81a58..7e7be0b 100644
--- a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
@@ -68,7 +68,7 @@ public class LiteralNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new LiteralNode(transformValue(transformer), transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
index 172fe5e..550f58b 100644
--- a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
@@ -60,7 +60,7 @@ public class LocalVariableDeclarationNode implements VariableNode, StatementNode
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new LocalVariableDeclarationNode(
transformer.transform(declaration),
transformer.transformExpression(initialValue));
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index 0d78c40..61419e4 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -164,7 +164,7 @@ public class MethodCallNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new MethodCallNode(
transformer.transformReceiver(receiver),
transformer.transformMethodName(signature()),
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
index 5497995..42b6f5d 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
@@ -202,7 +202,7 @@ public class MethodNode implements Node {
);
}
- public MethodNode transform(NodeTransformer transformer) {
+ public MethodNode transformSubtree(NodeTransformer transformer) {
return new MethodNode(
transformer.transformAnnotations(annotations),
isStatic,
diff --git a/src/main/java/org/zwobble/couscous/ast/Node.java b/src/main/java/org/zwobble/couscous/ast/Node.java
index 4039e31..643730b 100644
--- a/src/main/java/org/zwobble/couscous/ast/Node.java
+++ b/src/main/java/org/zwobble/couscous/ast/Node.java
@@ -5,5 +5,5 @@ import org.zwobble.couscous.ast.visitors.NodeTransformer;
public interface Node {
int type();
Iterable<? extends Node> childNodes();
- Node transform(NodeTransformer transformer);
+ Node transformSubtree(NodeTransformer transformer);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/OperationNode.java b/src/main/java/org/zwobble/couscous/ast/OperationNode.java
index 1a838bd..6373642 100644
--- a/src/main/java/org/zwobble/couscous/ast/OperationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/OperationNode.java
@@ -56,7 +56,7 @@ public class OperationNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new OperationNode(
operator,
transformer.transformExpressions(arguments),
diff --git a/src/main/java/org/zwobble/couscous/ast/Receiver.java b/src/main/java/org/zwobble/couscous/ast/Receiver.java
index ca547a2..4347928 100644
--- a/src/main/java/org/zwobble/couscous/ast/Receiver.java
+++ b/src/main/java/org/zwobble/couscous/ast/Receiver.java
@@ -5,7 +5,7 @@ import org.zwobble.couscous.ast.visitors.NodeTransformer;
public interface Receiver extends Node {
<T> T accept(Mapper<T> mapper);
- Receiver transform(NodeTransformer transformer);
+ Receiver transformSubtree(NodeTransformer transformer);
interface Mapper<T> {
T visit(ExpressionNode receiver);
diff --git a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
index 28a16f8..90d4fed 100644
--- a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
@@ -29,7 +29,7 @@ public class ReturnNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new ReturnNode(transformer.transformExpression(value));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/StatementNode.java b/src/main/java/org/zwobble/couscous/ast/StatementNode.java
index c18fe5d..2480571 100644
--- a/src/main/java/org/zwobble/couscous/ast/StatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/StatementNode.java
@@ -3,5 +3,5 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
public interface StatementNode extends Node {
- StatementNode transform(NodeTransformer transformer);
+ StatementNode transformSubtree(NodeTransformer transformer);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java b/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java
index cbef8c5..862c6e4 100644
--- a/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java
+++ b/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java
@@ -39,7 +39,7 @@ public class StaticReceiver implements Receiver {
}
@Override
- public Receiver transform(NodeTransformer transformer) {
+ public Receiver transformSubtree(NodeTransformer transformer) {
return new StaticReceiver(transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
index 979bd33..47a7695 100644
--- a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
@@ -48,7 +48,7 @@ public class TernaryConditionalNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new TernaryConditionalNode(
transformer.transformExpression(condition),
transformer.transformExpression(ifTrue),
diff --git a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
index 5b80b9c..121cbc4 100644
--- a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
@@ -35,7 +35,7 @@ public class ThisReferenceNode implements ExpressionNode, ReferenceNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new ThisReferenceNode(transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ThrowNode.java b/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
index 23e42c7..2b4c530 100644
--- a/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
@@ -29,7 +29,7 @@ public class ThrowNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new ThrowNode(transformer.transformExpression(value));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TryNode.java b/src/main/java/org/zwobble/couscous/ast/TryNode.java
index ae1890b..070a7f9 100644
--- a/src/main/java/org/zwobble/couscous/ast/TryNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TryNode.java
@@ -58,7 +58,7 @@ public class TryNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new TryNode(
transformer.transformStatements(body),
eagerMap(exceptionHandlers, handler -> new ExceptionHandlerNode(
diff --git a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
index 1c8ee6e..916c278 100644
--- a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
@@ -47,7 +47,7 @@ public class TypeCoercionNode implements ExpressionNode {
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new TypeCoercionNode(
transformer.transformExpression(expression),
transformer.transform(type));
diff --git a/src/main/java/org/zwobble/couscous/ast/TypeNode.java b/src/main/java/org/zwobble/couscous/ast/TypeNode.java
index 3e18de7..9aa9cfb 100644
--- a/src/main/java/org/zwobble/couscous/ast/TypeNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TypeNode.java
@@ -12,5 +12,5 @@ public interface TypeNode extends Node {
List<FormalTypeParameterNode> getTypeParameters();
Set<Type> getSuperTypes();
List<MethodNode> getMethods();
- TypeNode transform(NodeTransformer transformer);
+ TypeNode transformSubtree(NodeTransformer transformer);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
index 0763fc4..e9aac1e 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
@@ -49,7 +49,7 @@ public class VariableReferenceNode implements AssignableExpressionNode, Referenc
}
@Override
- public ExpressionNode transform(NodeTransformer transformer) {
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
return new VariableReferenceNode(transformer.transform(referent));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/WhileNode.java b/src/main/java/org/zwobble/couscous/ast/WhileNode.java
index 63db222..7c06fac 100644
--- a/src/main/java/org/zwobble/couscous/ast/WhileNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/WhileNode.java
@@ -38,7 +38,7 @@ public class WhileNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new WhileNode(
transformer.transformExpression(condition),
transformer.transformStatements(body));
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
index 3aa9bdc..6bd7870 100644
--- a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
@@ -58,7 +58,7 @@ public class SwitchCaseNode implements Node {
}
@Override
- public SwitchCaseNode transform(NodeTransformer transformer) {
+ public SwitchCaseNode transformSubtree(NodeTransformer transformer) {
return new SwitchCaseNode(
value.map(transformer::transformExpression),
transformer.transformStatements(statements)
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchNode.java b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchNode.java
index 8e1e226..0cd2848 100644
--- a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchNode.java
@@ -39,10 +39,10 @@ public class SwitchNode implements StatementNode {
}
@Override
- public StatementNode transform(NodeTransformer transformer) {
+ public StatementNode transformSubtree(NodeTransformer transformer) {
return new SwitchNode(
transformer.transformExpression(value),
- eagerMap(cases, caseNode -> caseNode.transform(transformer))
+ eagerMap(cases, caseNode -> caseNode.transformSubtree(transformer))
);
}
}
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 296e5c7..fb344e0 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
@@ -8,6 +8,7 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.types.TypeParameter;
+import org.zwobble.couscous.util.ExtraLists;
import java.util.List;
import java.util.Map;
@@ -97,6 +98,22 @@ public class NodeTransformer {
this.transformFieldName = transformFieldName;
}
+ public Node transform(Node node) {
+ if (node instanceof ExpressionNode) {
+ return transformExpression((ExpressionNode) node);
+ } else if (node instanceof StatementNode) {
+ List<StatementNode> statements = ExtraLists.copyOf(transformStatement((StatementNode) node));
+ if (statements.size() != 1) {
+ throw new UnsupportedOperationException("TODO: add support for compound statements");
+ }
+ return statements.get(0);
+ } else if (node instanceof TypeNode) {
+ return transformTypeDeclaration((TypeNode) node);
+ } else {
+ return node.transformSubtree(this);
+ }
+ }
+
public MethodSignature transform(MethodSignature signature) {
return new MethodSignature(
transformMethodName(signature),
@@ -126,12 +143,12 @@ public class NodeTransformer {
}
public ExpressionNode transformExpression(ExpressionNode expression) {
- ExpressionNode transformed = expression.transform(this);
+ ExpressionNode transformed = expression.transformSubtree(this);
return transformExpression.apply(transformed).orElse(transformed);
}
public Receiver transformReceiver(Receiver receiver) {
- return receiver.transform(this);
+ return receiver.transformSubtree(this);
}
public VariableDeclaration transform(VariableDeclaration declaration) {
@@ -139,44 +156,48 @@ public class NodeTransformer {
}
public final Iterable<StatementNode> transformStatement(StatementNode statement) {
- StatementNode transformed = statement.transform(this);
+ StatementNode transformed = statement.transformSubtree(this);
return transformStatement.apply(transformed).orElseGet(() -> list(transformed));
}
public FormalTypeParameterNode transformFormalTypeParameter(FormalTypeParameterNode typeParameter) {
- return typeParameter.transform(this);
+ return typeParameter.transformSubtree(this);
}
public FormalArgumentNode transformFormalArgument(FormalArgumentNode formalArgumentNode) {
- return formalArgumentNode.transform(this);
+ return formalArgumentNode.transformSubtree(this);
}
public AnnotationNode transformAnnotation(AnnotationNode annotation) {
- return annotation.transform(this);
+ return annotation.transformSubtree(this);
}
public MethodNode transformMethod(MethodNode method) {
- return method.transform(this);
+ return method.transformSubtree(this);
}
public ConstructorNode transformConstructor(ConstructorNode constructor) {
- return constructor.transform(this);
+ return constructor.transformSubtree(this);
}
public FieldDeclarationNode transformField(FieldDeclarationNode field) {
- return field.transform(this);
+ return field.transformSubtree(this);
+ }
+
+ public TypeNode transformTypeDeclaration(TypeNode typeNode) {
+ return typeNode.transformSubtree(this);
}
public ClassNode transformClass(ClassNode classNode) {
- return classNode.transform(this);
+ return classNode.transformSubtree(this);
}
private Node transformInterface(InterfaceNode interfaceNode) {
- return interfaceNode.transform(this);
+ return interfaceNode.transformSubtree(this);
}
private Node transformEnum(EnumNode enumNode) {
- return enumNode.transform(this);
+ return enumNode.transformSubtree(this);
}
public List<AnnotationNode> transformAnnotations(List<AnnotationNode> annotations) {