aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/values
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 17:28:48 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 17:28:48 +0000
commit7dab9cb11a7181094144e4319716c4d91262a289 (patch)
treeaac0c439a4c3445837c8703c002d6bd23f5df3bf /src/main/java/org/zwobble/couscous/values
parenta76af2307f7d4e67ac949559de43afb0bd1e8da1 (diff)
Add reading of type literals
Diffstat (limited to 'src/main/java/org/zwobble/couscous/values')
-rw-r--r--src/main/java/org/zwobble/couscous/values/ObjectValues.java1
-rw-r--r--src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java1
-rw-r--r--src/main/java/org/zwobble/couscous/values/PrimitiveValues.java6
-rw-r--r--src/main/java/org/zwobble/couscous/values/TypeValue.java44
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();
+ }
+}