diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-15 23:14:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-15 23:20:03 +0100 |
| commit | d995649e3bab94002b439aebcc93e7d3f16b13fc (patch) | |
| tree | 5ddc0b1e224e8bda7201b621e089e8f3a8f7f6b8 /src/main/java/org/zwobble/couscous/ast | |
| parent | 9a032e3bda13169959e5022ca21e7f160edf351f (diff) | |
Remove Identifiers in favour of instance methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
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"; - } -} |
