aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/EnumNode.java32
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java4
2 files changed, 24 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/EnumNode.java b/src/main/java/org/zwobble/couscous/ast/EnumNode.java
index 9e7a0b7..162d2a0 100644
--- a/src/main/java/org/zwobble/couscous/ast/EnumNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/EnumNode.java
@@ -12,14 +12,16 @@ import static org.zwobble.couscous.util.ExtraLists.list;
import static org.zwobble.couscous.util.ExtraSets.set;
public class EnumNode implements TypeNode {
- public static EnumNode declareEnum(ScalarType name) {
- return new EnumNode(name);
+ public static EnumNode declareEnum(ScalarType name, List<String> values) {
+ return new EnumNode(name, values);
}
private final ScalarType name;
+ private final List<String> values;
- public EnumNode(ScalarType name) {
+ public EnumNode(ScalarType name, List<String> values) {
this.name = name;
+ this.values = values;
}
@Override
@@ -27,6 +29,10 @@ public class EnumNode implements TypeNode {
return name;
}
+ public List<String> getValues() {
+ return values;
+ }
+
@Override
public List<FormalTypeParameterNode> getTypeParameters() {
return list();
@@ -44,34 +50,38 @@ public class EnumNode implements TypeNode {
@Override
public TypeNode transform(NodeTransformer transformer) {
- return new EnumNode(transformer.transform(name));
+ return new EnumNode(transformer.transform(name), values);
+ }
+
+ @Override
+ public <T> T accept(NodeMapper<T> visitor) {
+ return visitor.visit(this);
}
@Override
public String toString() {
return "EnumNode(" +
"name=" + name +
+ ", values=" + values +
')';
}
@Override
- public <T> T accept(NodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
EnumNode enumNode = (EnumNode) o;
- return name.equals(enumNode.name);
+ if (!name.equals(enumNode.name)) return false;
+ return values.equals(enumNode.values);
}
@Override
public int hashCode() {
- return name.hashCode();
+ int result = name.hashCode();
+ result = 31 * result + values.hashCode();
+ return result;
}
}
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index a83be40..fe7646b 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -104,7 +104,9 @@ public class JavaReader {
private TypeNode readEnumDeclaration(EnumDeclaration type) {
ScalarType name = (ScalarType) typeOf(type.resolveBinding());
- return new EnumNode(name);
+ @SuppressWarnings("unchecked")
+ List<EnumConstantDeclaration> values = type.enumConstants();
+ return new EnumNode(name, eagerMap(values, declaration -> declaration.getName().getIdentifier()));
}
private TypeNode readTypeDeclaration(TypeDeclaration type) {