From 11247b4df9b3d882f396ac7eaabb275908c8c8f8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 28 Feb 2016 11:58:39 +0000 Subject: Implement InterfaceNode.accept and transform --- src/main/java/org/zwobble/couscous/ast/InterfaceNode.java | 11 +++++++++-- src/main/java/org/zwobble/couscous/ast/Node.java | 6 ++++++ .../org/zwobble/couscous/ast/structure/NodeStructure.java | 5 +++++ .../java/org/zwobble/couscous/ast/visitors/NodeMapper.java | 1 + .../zwobble/couscous/ast/visitors/NodeMapperWithDefault.java | 7 ++++++- .../org/zwobble/couscous/ast/visitors/NodeTransformer.java | 9 +++++++++ .../java/org/zwobble/couscous/ast/visitors/NodeVisitor.java | 1 + .../zwobble/couscous/backends/csharp/CsharpSerializer.java | 5 +++++ 8 files changed, 42 insertions(+), 3 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java index 09d2d3a..4ae43c8 100644 --- a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java +++ b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.NodeMapper; +import org.zwobble.couscous.ast.visitors.NodeTransformer; import java.util.List; import java.util.Set; @@ -45,8 +46,14 @@ public class InterfaceNode implements TypeNode { @Override public T accept(NodeMapper visitor) { - // TODO: implement this - return null; + return visitor.visit(this); + } + + public InterfaceNode transform(NodeTransformer transformer) { + return new InterfaceNode( + transformer.transform(name), + transformer.transformTypes(superTypes), + transformer.transformMethods(methods)); } @Override diff --git a/src/main/java/org/zwobble/couscous/ast/Node.java b/src/main/java/org/zwobble/couscous/ast/Node.java index 44fabc1..a055488 100644 --- a/src/main/java/org/zwobble/couscous/ast/Node.java +++ b/src/main/java/org/zwobble/couscous/ast/Node.java @@ -149,6 +149,12 @@ public interface Node { visitor.visit(classNode); return null; } + + @Override + public Void visit(InterfaceNode interfaceNode) { + visitor.visit(interfaceNode); + return null; + } }); } T accept(NodeMapper visitor); diff --git a/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java b/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java index a4cedca..2424bbe 100644 --- a/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java +++ b/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java @@ -148,6 +148,11 @@ public class NodeStructure { classNode.getMethods().stream()); } + @Override + public Stream visit(InterfaceNode interfaceNode) { + return interfaceNode.getMethods().stream(); + } + @Override public Stream visit(MethodNode methodNode) { return concatStreams( diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapper.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapper.java index e0e16a8..338d8d2 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapper.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapper.java @@ -30,4 +30,5 @@ public interface NodeMapper { T visit(ConstructorNode constructorNode); T visit(FieldDeclarationNode declaration); T visit(ClassNode classNode); + T visit(InterfaceNode interfaceNode); } diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapperWithDefault.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapperWithDefault.java index fb0b93a..bcb74d5 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapperWithDefault.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeMapperWithDefault.java @@ -118,7 +118,12 @@ public class NodeMapperWithDefault implements NodeMapper { public T visit(ClassNode classNode) { return defaultValue; } - + + @Override + public T visit(InterfaceNode interfaceNode) { + return defaultValue; + } + @Override public T visit(MethodNode methodNode) { return defaultValue; 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 277813c..5e4d90d 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java @@ -144,6 +144,11 @@ public class NodeTransformer { public Node visit(ClassNode classNode) { return transformClass(classNode); } + + @Override + public Node visit(InterfaceNode interfaceNode) { + return transformInterface(interfaceNode); + } }); } @@ -239,6 +244,10 @@ public class NodeTransformer { return classNode.transform(this); } + private Node transformInterface(InterfaceNode interfaceNode) { + return interfaceNode.transform(this); + } + public List transformAnnotations(List annotations) { return transformList(annotations, this::transformAnnotation); } diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java index 4a80008..28c38fc 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java @@ -30,4 +30,5 @@ public interface NodeVisitor { void visit(ConstructorNode constructorNode); void visit(FieldDeclarationNode declaration); void visit(ClassNode classNode); + void visit(InterfaceNode interfaceNode); } diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java index c63bbbb..37147ed 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -324,6 +324,11 @@ public class CsharpSerializer implements NodeVisitor { }); } + @Override + public void visit(InterfaceNode interfaceNode) { + throw new UnsupportedOperationException(); + } + private void writeStaticConstructor(ClassNode classNode) { if (!classNode.getStaticConstructor().isEmpty()) { writer.writeStatement(() -> { -- cgit v1.2.3