aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-15 23:14:08 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-15 23:20:03 +0100
commitd995649e3bab94002b439aebcc93e7d3f16b13fc (patch)
tree5ddc0b1e224e8bda7201b621e089e8f3a8f7f6b8 /src/main/java/org/zwobble/couscous/ast
parent9a032e3bda13169959e5022ca21e7f160edf351f (diff)
Remove Identifiers in favour of instance methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/ExtendedIdentifier.java50
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java72
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/IdentifierPart.java27
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/Identifiers.java35
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/TopIdentifier.java20
6 files changed, 99 insertions, 110 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index 4bd432f..a567254 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -3,7 +3,6 @@ package org.zwobble.couscous.ast;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.zwobble.couscous.ast.identifiers.Identifier;
-import org.zwobble.couscous.ast.identifiers.Identifiers;
import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.types.Types;
@@ -41,7 +40,7 @@ public class ClassNodeBuilder {
}
public ClassNodeBuilder addTypeParameter(String name) {
- this.typeParameters.add(formalTypeParameter(Identifiers.forType(this.name.getQualifiedName()), name));
+ this.typeParameters.add(formalTypeParameter(Identifier.forType(this.name.getQualifiedName()), name));
return this;
}
@@ -178,4 +177,4 @@ public class ClassNodeBuilder {
return this.build.apply(this);
}
}
-} \ No newline at end of file
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/ExtendedIdentifier.java b/src/main/java/org/zwobble/couscous/ast/identifiers/ExtendedIdentifier.java
deleted file mode 100644
index 407c6da..0000000
--- a/src/main/java/org/zwobble/couscous/ast/identifiers/ExtendedIdentifier.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.zwobble.couscous.ast.identifiers;
-
-import static org.zwobble.couscous.util.ExtraIterables.lazyAppend;
-
-public class ExtendedIdentifier implements Identifier {
- private final Identifier parent;
- private final String part;
- private final IdentifierType type;
-
- ExtendedIdentifier(Identifier parent, String part, IdentifierType type) {
- this.parent = parent;
- this.part = part;
- this.type = type;
- }
-
- @Override
- public Iterable<IdentifierPart> getParts() {
- return lazyAppend(parent.getParts(), new IdentifierPart(part, type));
- }
-
- @Override
- public String toString() {
- return "ExtendedIdentifier(" +
- "parent=" + parent +
- ", part='" + part + '\'' +
- ", type=" + type +
- ')';
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- ExtendedIdentifier that = (ExtendedIdentifier) o;
-
- if (!parent.equals(that.parent)) return false;
- if (!part.equals(that.part)) return false;
- return type == that.type;
-
- }
-
- @Override
- public int hashCode() {
- int result = parent.hashCode();
- result = 31 * result + part.hashCode();
- result = 31 * result + type.hashCode();
- return result;
- }
-}
diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java
index 777a0bb..07d7933 100644
--- a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java
+++ b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java
@@ -1,5 +1,73 @@
package org.zwobble.couscous.ast.identifiers;
-public interface Identifier {
- Iterable<IdentifierPart> getParts();
+import org.zwobble.couscous.types.ScalarType;
+import org.zwobble.couscous.util.ExtraLists;
+
+import java.util.List;
+
+import static org.zwobble.couscous.util.ExtraLists.list;
+
+public class Identifier {
+ public static final Identifier TOP = new Identifier(list());
+
+ public static Identifier forType(String name) {
+ return TOP.type(name);
+ }
+
+ public static Identifier forType(ScalarType type) {
+ return forType(type.getQualifiedName());
+ }
+
+ private final List<IdentifierPart> parts;
+
+ Identifier(List<IdentifierPart> parts) {
+ this.parts = parts;
+ }
+
+ public Iterable<IdentifierPart> getParts() {
+ return parts;
+ }
+
+ public Identifier type(String name) {
+ return extend(name, IdentifierType.TYPE);
+ }
+
+ public Identifier method(String name) {
+ return extend(name, IdentifierType.METHOD);
+ }
+
+ public Identifier constructor() {
+ return extend("", IdentifierType.CONSTRUCTOR);
+ }
+
+ public Identifier variable(String name) {
+ return extend(name, IdentifierType.VARIABLE);
+ }
+
+ private Identifier extend(String name, IdentifierType type) {
+ return new Identifier(ExtraLists.append(parts, new IdentifierPart(name, type)));
+ }
+
+ @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();
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/IdentifierPart.java b/src/main/java/org/zwobble/couscous/ast/identifiers/IdentifierPart.java
index 5aedcf0..ef1f83c 100644
--- a/src/main/java/org/zwobble/couscous/ast/identifiers/IdentifierPart.java
+++ b/src/main/java/org/zwobble/couscous/ast/identifiers/IdentifierPart.java
@@ -16,4 +16,31 @@ public class IdentifierPart {
public IdentifierType getType() {
return type;
}
+
+ @Override
+ public String toString() {
+ return "IdentifierPart(" +
+ "name='" + name + '\'' +
+ ", type=" + type +
+ ')';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ IdentifierPart that = (IdentifierPart) o;
+
+ if (!name.equals(that.name)) return false;
+ return type == that.type;
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = name.hashCode();
+ result = 31 * result + type.hashCode();
+ return result;
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifiers.java b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifiers.java
deleted file mode 100644
index f104674..0000000
--- a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifiers.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.zwobble.couscous.ast.identifiers;
-
-import org.zwobble.couscous.types.ScalarType;
-
-public class Identifiers {
- public static final Identifier TOP = TopIdentifier.INSTANCE;
-
- public static Identifier type(Identifier identifier, String name) {
- return extend(identifier, name, IdentifierType.TYPE);
- }
-
- public static Identifier method(Identifier identifier, String name) {
- return extend(identifier, name, IdentifierType.METHOD);
- }
-
- public static Identifier constructor(Identifier identifier) {
- return extend(identifier, "", IdentifierType.CONSTRUCTOR);
- }
-
- public static Identifier variable(Identifier identifier, String name) {
- return extend(identifier, name, IdentifierType.VARIABLE);
- }
-
- private static Identifier extend(Identifier identifier, String name, IdentifierType type) {
- return new ExtendedIdentifier(identifier, name, type);
- }
-
- public static Identifier forType(String name) {
- return type(TOP, name);
- }
-
- public static Identifier forType(ScalarType type) {
- return forType(type.getQualifiedName());
- }
-}
diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/TopIdentifier.java b/src/main/java/org/zwobble/couscous/ast/identifiers/TopIdentifier.java
deleted file mode 100644
index 6f578d2..0000000
--- a/src/main/java/org/zwobble/couscous/ast/identifiers/TopIdentifier.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.zwobble.couscous.ast.identifiers;
-
-import static org.zwobble.couscous.util.ExtraLists.list;
-
-public class TopIdentifier implements Identifier {
- static final Identifier INSTANCE = new TopIdentifier();
-
- private TopIdentifier() {
- }
-
- @Override
- public Iterable<IdentifierPart> getParts() {
- return list();
- }
-
- @Override
- public String toString() {
- return "TOP";
- }
-}