aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 13:44:18 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 13:44:18 +0100
commit7324dc0bd7c70c0be4a28ca2bba5522cceaf277f (patch)
tree14d3df885c13346cd1c9d1cbfa63ffe27a2a01e4 /src/main/java/org/zwobble/couscous/ast
parentba5bf4a7c4f9097d540352afa1e895d2f1019328 (diff)
Add basic implementation of instance methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java18
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java9
7 files changed, 46 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
new file mode 100644
index 0000000..2aecc6c
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
@@ -0,0 +1,18 @@
+package org.zwobble.couscous.ast;
+
+import java.util.List;
+
+import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
+
+import lombok.Value;
+
+@Value(staticConstructor="constructorCall")
+public class ConstructorCallNode implements ExpressionNode {
+ TypeName type;
+ List<ExpressionNode> arguments;
+
+ @Override
+ public <T> T accept(ExpressionNodeMapper<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
index 5add277..2e1cded 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
@@ -45,6 +45,12 @@ public interface ExpressionNode extends Node {
visitor.visit(staticMethodCall);
return null;
}
+
+ @Override
+ public Void visit(ConstructorCallNode call) {
+ visitor.visit(call);
+ return null;
+ }
});
}
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
index e924299..b547c92 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
@@ -15,6 +15,10 @@ public class MethodNode implements Node {
return builder().isStatic(true).name(name);
}
+ public static MethodNodeBuilder method(String name) {
+ return builder().isStatic(false).name(name);
+ }
+
boolean isStatic;
String name;
@Singular
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
index 2be2894..f924797 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
@@ -1,6 +1,7 @@
package org.zwobble.couscous.ast.visitors;
import org.zwobble.couscous.ast.AssignmentNode;
+import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.MethodCallNode;
import org.zwobble.couscous.ast.StaticMethodCallNode;
@@ -14,4 +15,5 @@ public interface ExpressionNodeMapper<T> {
T visit(TernaryConditionalNode ternaryConditional);
T visit(MethodCallNode methodCall);
T visit(StaticMethodCallNode staticMethodCall);
+ T visit(ConstructorCallNode call);
}
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 014b48e..7377986 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.ast.visitors;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
@@ -19,6 +20,7 @@ public interface NodeVisitor {
void visit(TernaryConditionalNode ternaryConditional);
void visit(MethodCallNode methodCall);
void visit(StaticMethodCallNode staticMethodCall);
+ void visit(ConstructorCallNode call);
void visit(ReturnNode returnNode);
void visit(ExpressionStatementNode expressionStatement);
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
index 3a58614..ac3786b 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.ast.visitors;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
@@ -36,6 +37,10 @@ public interface NodeVisitorWithEmptyDefaults extends NodeVisitor {
@Override
default void visit(StaticMethodCallNode staticMethodCall) {
}
+
+ @Override
+ default void visit(ConstructorCallNode call) {
+ }
@Override
default void visit(ReturnNode returnNode) {
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
index 88c6e10..835d96f 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.ast.visitors;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
@@ -59,6 +60,14 @@ public class NodeVisitors {
argument.accept(this);
}
}
+
+ @Override
+ public void visit(ConstructorCallNode call) {
+ visitor.visit(call);
+ for (val argument : call.getArguments()) {
+ argument.accept(this);
+ }
+ }
@Override
public void visit(ReturnNode returnNode) {