aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InterfaceNode.java11
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Node.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeMapper.java1
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeMapperWithDefault.java7
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java9
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java1
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java5
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(() -> {