diff options
Diffstat (limited to 'src/main/java/org')
45 files changed, 83 insertions, 58 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) { diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java index 4dba10e..75a23ec 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java @@ -42,7 +42,7 @@ public class CsharpCodeGenerator { } private Node generateCode(Node node) { - return node.transform(CsharpPrimitiveMethods.TRANSFORMER).transform(nodeTransformer); + return nodeTransformer.transform(CsharpPrimitiveMethods.TRANSFORMER.transform(node)); } private Type transformType(Type type) { diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveInstanceMethodCall.java b/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveInstanceMethodCall.java index daa6de8..25555d8 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveInstanceMethodCall.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveInstanceMethodCall.java @@ -37,7 +37,7 @@ public class PrimitiveInstanceMethodCall implements ExpressionNode { } @Override - public ExpressionNode transform(NodeTransformer transformer) { + public ExpressionNode transformSubtree(NodeTransformer transformer) { return new PrimitiveInstanceMethodCall( method, transformer.transformExpression(receiver), diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveStaticMethodCall.java b/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveStaticMethodCall.java index d7953ce..94b26da 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveStaticMethodCall.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/primitives/PrimitiveStaticMethodCall.java @@ -33,7 +33,7 @@ public class PrimitiveStaticMethodCall implements ExpressionNode { } @Override - public ExpressionNode transform(NodeTransformer transformer) { + public ExpressionNode transformSubtree(NodeTransformer transformer) { return new PrimitiveStaticMethodCall( method, transformer.transformExpressions(arguments) diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java index c6de9f3..122a28e 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java @@ -7,6 +7,7 @@ import com.google.common.collect.Iterators; import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.structure.NodeStructure; import org.zwobble.couscous.ast.visitors.DynamicNodeMapper; +import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.backends.naming.Names; import org.zwobble.couscous.backends.python.ast.*; import org.zwobble.couscous.frontends.java.Scope; @@ -59,7 +60,8 @@ import static org.zwobble.couscous.util.ExtraLists.*; public class PythonCodeGenerator { public static PythonModuleNode generateCode(TypeNode sugaredTypeNode) { - TypeNode typeNode = sugaredTypeNode.transform(DesugarSwitchToIfElse.transformer(Scope.create())); + NodeTransformer switchTransformer = DesugarSwitchToIfElse.transformer(Scope.create()); + TypeNode typeNode = switchTransformer.transformTypeDeclaration(sugaredTypeNode); Iterator<PythonImportNode> imports = generateImports(typeNode).iterator(); 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 7fae204..30adff9 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -199,7 +199,7 @@ public class JavaReader { Maps.uniqueIndex(freeVariables, variable -> variable.freeVariable), freeVariable -> captureAccess(className, freeVariable)); NodeTransformer transformer = NodeTransformer.replaceExpressions(replacements); - return eagerMap(body, statement -> statement.transform(transformer)); + return eagerFlatMap(body, transformer::transformStatement); } private ConstructorNode buildConstructor( @@ -321,7 +321,7 @@ public class JavaReader { thisReference(anonymousClass.getType().get()), thisReference(className) )); - classNode = classNode.transform(nodeTransformer); + classNode = nodeTransformer.transformClass(classNode); } return classWithCapture(scope, classNode); } diff --git a/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java b/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java index 42f0d83..88c29a6 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java +++ b/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java @@ -2,6 +2,7 @@ package org.zwobble.couscous.interpreter; import com.google.common.collect.Iterables; import org.zwobble.couscous.ast.TypeNode; +import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.frontends.java.Scope; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; @@ -24,9 +25,10 @@ public class JavaProject { } public static Project of(List<TypeNode> classNodes) { + NodeTransformer transformer = DesugarSwitchToIfElse.transformer(Scope.create()); Iterable<InterpreterType> concreteTypes = Iterables.transform( classNodes, - classNode -> new UserDefinedInterpreterType(classNode.transform(DesugarSwitchToIfElse.transformer(Scope.create()))) + classNode -> new UserDefinedInterpreterType(transformer.transformTypeDeclaration(classNode)) ); return builder() .addClasses(concreteTypes) |
