aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java
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/identifiers/Identifier.java
parent9a032e3bda13169959e5022ca21e7f160edf351f (diff)
Remove Identifiers in favour of instance methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java72
1 files changed, 70 insertions, 2 deletions
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();
+ }
}