diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-10 17:28:48 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-10 17:28:48 +0000 |
| commit | 7dab9cb11a7181094144e4319716c4d91262a289 (patch) | |
| tree | aac0c439a4c3445837c8703c002d6bd23f5df3bf /src/main/java/org/zwobble/couscous/values | |
| parent | a76af2307f7d4e67ac949559de43afb0bd1e8da1 (diff) | |
Add reading of type literals
Diffstat (limited to 'src/main/java/org/zwobble/couscous/values')
4 files changed, 52 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/values/ObjectValues.java b/src/main/java/org/zwobble/couscous/values/ObjectValues.java index 2554e94..2681259 100644 --- a/src/main/java/org/zwobble/couscous/values/ObjectValues.java +++ b/src/main/java/org/zwobble/couscous/values/ObjectValues.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.values; import org.zwobble.couscous.ast.TypeName; public class ObjectValues { + public static final TypeName CLASS = TypeName.of("java.lang.Class"); public static final TypeName OBJECT = TypeName.of("java.lang.Object"); public static final TypeName BOXED_INT = TypeName.of("java.lang.Integer"); public static final TypeName BOXED_BOOLEAN = TypeName.of("java.lang.Boolean"); diff --git a/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java b/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java index 07047b8..9b31b05 100644 --- a/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java +++ b/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java @@ -5,4 +5,5 @@ public interface PrimitiveValueVisitor<T> { T visit(StringValue value); T visit(BooleanValue value); T visit(UnitValue unitValue); + T visit(TypeValue value); } diff --git a/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java b/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java index 2d4f91c..8022a9d 100644 --- a/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java +++ b/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java @@ -1,5 +1,7 @@ package org.zwobble.couscous.values; +import org.zwobble.couscous.ast.TypeName; + public class PrimitiveValues { public static final PrimitiveValue UNIT = UnitValue.UNIT; public static final PrimitiveValue TRUE = new BooleanValue(true); @@ -16,4 +18,8 @@ public class PrimitiveValues { public static PrimitiveValue value(boolean value) { return value ? TRUE : FALSE; } + + public static PrimitiveValue value(TypeName type) { + return new TypeValue(type); + } } diff --git a/src/main/java/org/zwobble/couscous/values/TypeValue.java b/src/main/java/org/zwobble/couscous/values/TypeValue.java new file mode 100644 index 0000000..43dfc33 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/values/TypeValue.java @@ -0,0 +1,44 @@ +package org.zwobble.couscous.values; + +import org.zwobble.couscous.ast.TypeName; + +public class TypeValue implements PrimitiveValue { + private final TypeName type; + + public TypeValue(TypeName type) { + this.type = type; + } + + @Override + public <T> T accept(PrimitiveValueVisitor<T> visitor) { + return visitor.visit(this); + } + + @Override + public TypeName getType() { + return ObjectValues.CLASS; + } + + @Override + public String toString() { + return "TypeValue(" + + "type=" + type + + ')'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TypeValue typeValue = (TypeValue) o; + + return type.equals(typeValue.type); + + } + + @Override + public int hashCode() { + return type.hashCode(); + } +} |
