aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
index 534f244..3aa9bdc 100644
--- a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
@@ -1,12 +1,25 @@
package org.zwobble.couscous.ast.sugar;
+import com.google.common.collect.Iterables;
import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.Node;
+import org.zwobble.couscous.ast.NodeTypes;
import org.zwobble.couscous.ast.StatementNode;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
+import org.zwobble.couscous.util.ExtraIterables;
import java.util.List;
import java.util.Optional;
-public class SwitchCaseNode {
+public class SwitchCaseNode implements Node {
+ public static SwitchCaseNode switchCase(ExpressionNode value, List<StatementNode> statements) {
+ return switchCase(Optional.of(value), statements);
+ }
+
+ public static SwitchCaseNode switchCase(List<StatementNode> statements) {
+ return switchCase(Optional.empty(), statements);
+ }
+
public static SwitchCaseNode switchCase(Optional<ExpressionNode> value, List<StatementNode> statements) {
return new SwitchCaseNode(value, statements);
}
@@ -30,4 +43,25 @@ public class SwitchCaseNode {
public List<StatementNode> getStatements() {
return statements;
}
+
+ @Override
+ public int type() {
+ return NodeTypes.SWITCH_CASE;
+ }
+
+ @Override
+ public Iterable<? extends Node> childNodes() {
+ return Iterables.concat(
+ ExtraIterables.iterable(value),
+ statements
+ );
+ }
+
+ @Override
+ public SwitchCaseNode transform(NodeTransformer transformer) {
+ return new SwitchCaseNode(
+ value.map(transformer::transformExpression),
+ transformer.transformStatements(statements)
+ );
+ }
}