aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java86
1 files changed, 72 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java b/src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java
index 08bb9a3..0722705 100644
--- a/src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java
+++ b/src/main/java/org/zwobble/couscous/ast/sugar/AnonymousClass.java
@@ -1,38 +1,63 @@
package org.zwobble.couscous.ast.sugar;
-import org.zwobble.couscous.ast.FieldDeclarationNode;
-import org.zwobble.couscous.ast.MethodNode;
+import org.zwobble.couscous.ast.*;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
import org.zwobble.couscous.frontends.java.AnonymousType;
import org.zwobble.couscous.types.Type;
import java.util.List;
import java.util.Optional;
-import java.util.Set;
-public class AnonymousClass {
- private final Optional<AnonymousType> type;
- private final Set<Type> superTypes;
+import static com.google.common.collect.Iterables.concat;
+
+public class AnonymousClass implements ExpressionNode {
+ private final Optional<AnonymousType> anonymousType;
+ private final Type superType;
private final List<FieldDeclarationNode> fields;
private final List<MethodNode> methods;
public AnonymousClass(
- Optional<AnonymousType> type,
- Set<Type> superTypes,
+ Optional<AnonymousType> anonymousType,
+ Type superType,
List<FieldDeclarationNode> fields,
List<MethodNode> methods)
{
- this.type = type;
- this.superTypes = superTypes;
+ this.anonymousType = anonymousType;
+ this.superType = superType;
this.fields = fields;
this.methods = methods;
}
- public Optional<AnonymousType> getType() {
- return type;
+ @Override
+ public Type getType() {
+ return superType;
+ }
+
+ public Optional<AnonymousType> getAnonymousType() {
+ return anonymousType;
+ }
+
+ @Override
+ public int nodeType() {
+ return NodeTypes.ANONYMOUS_CLASS;
+ }
+
+ @Override
+ public Iterable<? extends Node> childNodes() {
+ return concat(
+ fields,
+ methods
+ );
}
- public Set<Type> getSuperTypes() {
- return superTypes;
+ @Override
+ public ExpressionNode transformSubtree(NodeTransformer transformer) {
+ return new AnonymousClass(
+ anonymousType,
+ transformer.transform(superType),
+ transformer.transformFields(fields),
+ transformer.transformMethods(methods)
+ );
}
public List<FieldDeclarationNode> getFields() {
@@ -42,4 +67,37 @@ public class AnonymousClass {
public List<MethodNode> getMethods() {
return methods;
}
+
+ @Override
+ public String toString() {
+ return "AnonymousClass(" +
+ "anonymousType=" + anonymousType +
+ ", superType=" + superType +
+ ", fields=" + fields +
+ ", methods=" + methods +
+ ')';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ AnonymousClass that = (AnonymousClass) o;
+
+ if (!anonymousType.equals(that.anonymousType)) return false;
+ if (!superType.equals(that.superType)) return false;
+ if (!fields.equals(that.fields)) return false;
+ return methods.equals(that.methods);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = anonymousType.hashCode();
+ result = 31 * result + superType.hashCode();
+ result = 31 * result + fields.hashCode();
+ result = 31 * result + methods.hashCode();
+ return result;
+ }
}