aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java81
-rw-r--r--src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java2
2 files changed, 77 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
index 8de1323..f3c92f9 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
@@ -3,13 +3,38 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import lombok.Value;
-
-@Value(staticConstructor="fieldAccess")
public class FieldAccessNode implements AssignableExpressionNode {
- ExpressionNode left;
- String fieldName;
- TypeName type;
+ public static FieldAccessNode fieldAccess(
+ ExpressionNode left,
+ String fieldName,
+ TypeName type) {
+ return new FieldAccessNode(left, fieldName, type);
+ }
+
+ private final ExpressionNode left;
+ private final String fieldName;
+ private final TypeName type;
+
+ public FieldAccessNode(
+ ExpressionNode left,
+ String fieldName,
+ TypeName type) {
+ this.left = left;
+ this.fieldName = fieldName;
+ this.type = type;
+ }
+
+ public ExpressionNode getLeft() {
+ return left;
+ }
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public TypeName getType() {
+ return type;
+ }
@Override
public <T> T accept(ExpressionNodeMapper<T> visitor) {
@@ -20,4 +45,48 @@ public class FieldAccessNode implements AssignableExpressionNode {
public void accept(AssignableExpressionNodeVisitor mapper) {
mapper.visit(this);
}
+
+ @Override
+ public String toString() {
+ return "FieldAccessNode(left=" + left + ", fieldName=" + fieldName
+ + ", type=" + type + ")";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((fieldName == null) ? 0 : fieldName.hashCode());
+ result = prime * result + ((left == null) ? 0 : left.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FieldAccessNode other = (FieldAccessNode) obj;
+ if (fieldName == null) {
+ if (other.fieldName != null)
+ return false;
+ } else if (!fieldName.equals(other.fieldName))
+ return false;
+ if (left == null) {
+ if (other.left != null)
+ return false;
+ } else if (!left.equals(other.left))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ return true;
+ }
}
diff --git a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
index 1c3dcd3..54e92da 100644
--- a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
@@ -20,6 +20,7 @@ import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.ConstructorNode;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.VariableDeclaration;
import org.zwobble.couscous.ast.VariableReferenceNode;
@@ -51,6 +52,7 @@ public class ValueObjectTests {
{ConstructorCallNode.class},
{ConstructorNode.class},
{ExpressionStatementNode.class},
+ {FieldAccessNode.class},
{VariableDeclaration.class}
});
}