aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/visitors
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 16:24:37 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 16:24:37 +0100
commite6f463257720bee91a1b4954d97684dbb3398cbf (patch)
treec8d1f04dfe8928d33361108aefee7e7572dae1c7 /src/main/java/org/zwobble/couscous/ast/visitors
parent9685c8fb7fa14d5b75d828f8443dd948715ac4af (diff)
Add support for constructors and fields
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/visitors')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/AssignableExpressionNodeVisitor.java9
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java15
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java23
5 files changed, 56 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/AssignableExpressionNodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/AssignableExpressionNodeVisitor.java
new file mode 100644
index 0000000..57cb105
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/AssignableExpressionNodeVisitor.java
@@ -0,0 +1,9 @@
+package org.zwobble.couscous.ast.visitors;
+
+import org.zwobble.couscous.ast.FieldAccessNode;
+import org.zwobble.couscous.ast.VariableReferenceNode;
+
+public interface AssignableExpressionNodeVisitor {
+ void visit(VariableReferenceNode reference);
+ void visit(FieldAccessNode fieldAccess);
+}
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 f924797..c1c3e88 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
@@ -2,18 +2,22 @@ package org.zwobble.couscous.ast.visitors;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ConstructorCallNode;
+import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.MethodCallNode;
import org.zwobble.couscous.ast.StaticMethodCallNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.ThisReferenceNode;
import org.zwobble.couscous.ast.VariableReferenceNode;
public interface ExpressionNodeMapper<T> {
T visit(LiteralNode literal);
T visit(VariableReferenceNode variableReference);
+ T visit(ThisReferenceNode reference);
T visit(AssignmentNode assignment);
T visit(TernaryConditionalNode ternaryConditional);
T visit(MethodCallNode methodCall);
T visit(StaticMethodCallNode staticMethodCall);
T visit(ConstructorCallNode call);
+ T visit(FieldAccessNode fieldAccess);
}
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 7377986..8a88052 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java
@@ -3,7 +3,9 @@ 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.ConstructorNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
import org.zwobble.couscous.ast.MethodCallNode;
@@ -11,16 +13,19 @@ import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.ast.StaticMethodCallNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.ThisReferenceNode;
import org.zwobble.couscous.ast.VariableReferenceNode;
public interface NodeVisitor {
void visit(LiteralNode literal);
void visit(VariableReferenceNode variableReference);
+ void visit(ThisReferenceNode reference);
void visit(AssignmentNode assignment);
void visit(TernaryConditionalNode ternaryConditional);
void visit(MethodCallNode methodCall);
void visit(StaticMethodCallNode staticMethodCall);
void visit(ConstructorCallNode call);
+ void visit(FieldAccessNode fieldAccess);
void visit(ReturnNode returnNode);
void visit(ExpressionStatementNode expressionStatement);
@@ -28,4 +33,5 @@ public interface NodeVisitor {
void visit(ClassNode classNode);
void visit(MethodNode methodNode);
+ void visit(ConstructorNode constructorNode);
}
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 ac3786b..8408b7a 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
@@ -3,7 +3,9 @@ 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.ConstructorNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
import org.zwobble.couscous.ast.MethodCallNode;
@@ -11,6 +13,7 @@ import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.ast.StaticMethodCallNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.ThisReferenceNode;
import org.zwobble.couscous.ast.VariableReferenceNode;
public interface NodeVisitorWithEmptyDefaults extends NodeVisitor {
@@ -23,6 +26,10 @@ public interface NodeVisitorWithEmptyDefaults extends NodeVisitor {
}
@Override
+ default void visit(ThisReferenceNode reference) {
+ }
+
+ @Override
default void visit(AssignmentNode assignment) {
}
@@ -41,6 +48,10 @@ public interface NodeVisitorWithEmptyDefaults extends NodeVisitor {
@Override
default void visit(ConstructorCallNode call) {
}
+
+ @Override
+ default void visit(FieldAccessNode fieldAccess) {
+ }
@Override
default void visit(ReturnNode returnNode) {
@@ -61,4 +72,8 @@ public interface NodeVisitorWithEmptyDefaults extends NodeVisitor {
@Override
default void visit(MethodNode methodNode) {
}
+
+ @Override
+ default void visit(ConstructorNode constructorNode) {
+ }
}
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 835d96f..bb5b054 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
@@ -3,7 +3,9 @@ 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.ConstructorNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
import org.zwobble.couscous.ast.MethodCallNode;
@@ -12,6 +14,7 @@ import org.zwobble.couscous.ast.Node;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.ast.StaticMethodCallNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.ThisReferenceNode;
import org.zwobble.couscous.ast.VariableReferenceNode;
import lombok.val;
@@ -28,12 +31,17 @@ public class NodeVisitors {
public void visit(VariableReferenceNode variableReference) {
visitor.visit(variableReference);
}
+
+ @Override
+ public void visit(ThisReferenceNode reference) {
+ visitor.visit(reference);
+ }
@Override
public void visit(AssignmentNode assignment) {
visitor.visit(assignment);
assignment.getValue().accept(this);
- visit(assignment.getTarget());
+ assignment.getTarget().accept(this);
}
@Override
@@ -68,6 +76,11 @@ public class NodeVisitors {
argument.accept(this);
}
}
+
+ @Override
+ public void visit(FieldAccessNode fieldAccess) {
+ visitor.visit(fieldAccess);
+ }
@Override
public void visit(ReturnNode returnNode) {
@@ -90,6 +103,7 @@ public class NodeVisitors {
@Override
public void visit(ClassNode classNode) {
visitor.visit(classNode);
+ classNode.getConstructor().accept(this);
for (val method : classNode.getMethods()) {
method.accept(this);
}
@@ -101,6 +115,13 @@ public class NodeVisitors {
statement.accept(this);
}
}
+
+ @Override
+ public void visit(ConstructorNode constructorNode) {
+ for (val statement : constructorNode.getBody()) {
+ statement.accept(this);
+ }
+ }
});
}
}