diff options
Diffstat (limited to 'src/main')
8 files changed, 42 insertions, 3 deletions
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> T accept(NodeMapper<T> 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> T accept(NodeMapper<T> 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 @@ -149,6 +149,11 @@ public class NodeStructure { } @Override + public Stream<? extends Node> visit(InterfaceNode interfaceNode) { + return interfaceNode.getMethods().stream(); + } + + @Override public Stream<Node> visit(MethodNode methodNode) { return concatStreams( methodNode.getAnnotations().stream(), 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> { 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<T> implements NodeMapper<T> { 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<AnnotationNode> transformAnnotations(List<AnnotationNode> 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(() -> { |
