diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-06 13:44:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-06 13:44:18 +0100 |
| commit | 7324dc0bd7c70c0be4a28ca2bba5522cceaf277f (patch) | |
| tree | 14d3df885c13346cd1c9d1cbfa63ffe27a2a01e4 /src/main/java/org/zwobble/couscous/ast | |
| parent | ba5bf4a7c4f9097d540352afa1e895d2f1019328 (diff) | |
Add basic implementation of instance methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
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) { |
