aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/ForNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/ForNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ForNode.java101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ForNode.java b/src/main/java/org/zwobble/couscous/ast/ForNode.java
new file mode 100644
index 0000000..4642b85
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/ForNode.java
@@ -0,0 +1,101 @@
+package org.zwobble.couscous.ast;
+
+import com.google.common.collect.Iterables;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
+import org.zwobble.couscous.util.ExtraIterables;
+import org.zwobble.couscous.util.ExtraLists;
+
+import java.util.List;
+
+public class ForNode implements StatementNode {
+ private final List<LocalVariableDeclarationNode> initializers;
+ private final ExpressionNode condition;
+ private final List<ExpressionNode> updaters;
+ private final List<StatementNode> statements;
+
+ public ForNode(
+ List<LocalVariableDeclarationNode> initializers,
+ ExpressionNode condition,
+ List<ExpressionNode> updaters,
+ List<StatementNode> statements
+ ) {
+ this.initializers = initializers;
+ this.condition = condition;
+ this.updaters = updaters;
+ this.statements = statements;
+ }
+
+ public List<LocalVariableDeclarationNode> getInitializers() {
+ return initializers;
+ }
+
+ public ExpressionNode getCondition() {
+ return condition;
+ }
+
+ public List<ExpressionNode> getUpdaters() {
+ return updaters;
+ }
+
+ public List<StatementNode> getStatements() {
+ return statements;
+ }
+
+ @Override
+ public int type() {
+ return NodeTypes.FOR;
+ }
+
+ @Override
+ public Iterable<? extends Node> childNodes() {
+ return Iterables.concat(
+ initializers,
+ ExtraIterables.of(condition),
+ updaters,
+ statements
+ );
+ }
+
+ @Override
+ public StatementNode transformSubtree(NodeTransformer transformer) {
+ return new ForNode(
+ ExtraLists.copyOf(ExtraIterables.cast(LocalVariableDeclarationNode.class, transformer.transformStatements(initializers))),
+ transformer.transformExpression(condition),
+ transformer.transformExpressions(updaters),
+ transformer.transformStatements(statements)
+ );
+ }
+
+ @Override
+ public String toString() {
+ return "ForNode(" +
+ "initializers=" + initializers +
+ ", condition=" + condition +
+ ", updaters=" + updaters +
+ ", statements=" + statements +
+ ')';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ForNode forNode = (ForNode) o;
+
+ if (!initializers.equals(forNode.initializers)) return false;
+ if (!condition.equals(forNode.condition)) return false;
+ if (!updaters.equals(forNode.updaters)) return false;
+ return statements.equals(forNode.statements);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = initializers.hashCode();
+ result = 31 * result + condition.hashCode();
+ result = 31 * result + updaters.hashCode();
+ result = 31 * result + statements.hashCode();
+ return result;
+ }
+}