aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-01 20:00:02 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-01 20:01:19 +0000
commitd5a4fb60e3b62f4dc1b67c83cd62c1a264bb4a12 (patch)
treecc5e2dfaf6468370a841e41dd91285b76e6cfd2f /src/main/java/org/zwobble/couscous/ast
parent4fd8b4132fd8f49b5368b86ebdbcdb84a0bdf7d0 (diff)
Generate variable IDs without Eclipse keys
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java10
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java44
5 files changed, 56 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index 9be591c..b41c972 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -1,6 +1,7 @@
package org.zwobble.couscous.ast;
import com.google.common.collect.ImmutableList;
+import org.zwobble.couscous.ast.identifiers.Identifier;
import java.util.Optional;
import java.util.function.Function;
@@ -110,7 +111,7 @@ public class ClassNodeBuilder {
return ThisReferenceNode.thisReference(name);
}
- public MethodBuilder<T> argument(String id, String name, TypeName type) {
+ public MethodBuilder<T> argument(Identifier id, String name, TypeName type) {
arguments.add(formalArg(var(id, name, type)));
return this;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
index 3499e26..a165070 100644
--- a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
@@ -1,5 +1,6 @@
package org.zwobble.couscous.ast;
+import org.zwobble.couscous.ast.identifiers.Identifier;
import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import java.util.function.Function;
@@ -8,7 +9,7 @@ import static org.zwobble.couscous.ast.VariableDeclaration.var;
public class LocalVariableDeclarationNode implements VariableNode, StatementNode {
public static LocalVariableDeclarationNode localVariableDeclaration(
- String id,
+ Identifier id,
String name,
TypeName type,
ExpressionNode initialValue) {
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java b/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
index 713f3a6..5932371 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
@@ -1,21 +1,23 @@
package org.zwobble.couscous.ast;
+import org.zwobble.couscous.ast.identifiers.Identifier;
+
public class VariableDeclaration {
- public static VariableDeclaration var(String id, String name, TypeName type) {
+ public static VariableDeclaration var(Identifier id, String name, TypeName type) {
return new VariableDeclaration(id, name, type);
}
- private final String id;
+ private final Identifier id;
private final String name;
private final TypeName type;
- private VariableDeclaration(String id, String name, TypeName type) {
+ private VariableDeclaration(Identifier id, String name, TypeName type) {
this.id = id;
this.name = name;
this.type = type;
}
- public String getId() {
+ public Identifier getId() {
return id;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
index b576389..50462e9 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
@@ -1,5 +1,6 @@
package org.zwobble.couscous.ast;
+import org.zwobble.couscous.ast.identifiers.Identifier;
import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
@@ -34,7 +35,7 @@ public class VariableReferenceNode implements AssignableExpressionNode {
return this;
}
- public String getReferentId() {
+ public Identifier getReferentId() {
return referent.getId();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java
new file mode 100644
index 0000000..29a33eb
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java
@@ -0,0 +1,44 @@
+package org.zwobble.couscous.ast.identifiers;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+public class Identifier {
+ public static final Identifier TOP = new Identifier(ImmutableList.of());
+
+ private final List<String> parts;
+
+ private Identifier(List<String> parts) {
+ this.parts = parts;
+ }
+
+ public Identifier extend(String name) {
+ ImmutableList.Builder<String> parts = ImmutableList.builder();
+ parts.addAll(this.parts);
+ parts.add(name);
+ return new Identifier(parts.build());
+ }
+
+ @Override
+ public String toString() {
+ return "Identifier(" +
+ "parts=" + parts +
+ ')';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Identifier that = (Identifier) o;
+
+ return parts.equals(that.parts);
+ }
+
+ @Override
+ public int hashCode() {
+ return parts.hashCode();
+ }
+}