From fd0769bde1ffad49ca74a404f18aae5d7226c558 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 1 Jan 2016 15:33:57 +0000 Subject: Get interpreter compiler tests working --- .../java/org/zwobble/couscous/ast/ClassNode.java | 80 ++++++++++------------ 1 file changed, 38 insertions(+), 42 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/ast/ClassNode.java') diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java index 55453f4..3545084 100644 --- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.NodeMapper; import java.util.List; +import java.util.Set; public class ClassNode implements Node { public static ClassNodeBuilder builder(String name) { @@ -10,23 +11,27 @@ public class ClassNode implements Node { } public static ClassNode declareClass( TypeName name, + Set superTypes, List fields, ConstructorNode constructor, List methods) { - return new ClassNode(name, fields, constructor, methods); + return new ClassNode(name, superTypes, fields, constructor, methods); } private final TypeName name; + private final Set superTypes; private final List fields; private final ConstructorNode constructor; private final List methods; private ClassNode( TypeName name, + Set superTypes, List fields, ConstructorNode constructor, List methodNodes) { this.name = name; + this.superTypes = superTypes; this.fields = fields; this.constructor = constructor; methods = methodNodes; @@ -35,7 +40,11 @@ public class ClassNode implements Node { public TypeName getName() { return name; } - + + public Set getSuperTypes() { + return superTypes; + } + public List getFields() { return fields; } @@ -59,51 +68,38 @@ public class ClassNode implements Node { @Override public String toString() { - return "ClassNode(name=" + name + ", fields=" + fields - + ", constructor=" + constructor + ", methods=" + methods + ")"; + return "ClassNode(" + + "name=" + name + + ", superTypes=" + superTypes + + ", fields=" + fields + + ", constructor=" + constructor + + ", methods=" + methods + + ')'; } @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result - + ((constructor == null) ? 0 : constructor.hashCode()); - result = prime * result + ((fields == null) ? 0 : fields.hashCode()); - result = prime * result + ((methods == null) ? 0 : methods.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ClassNode classNode = (ClassNode) o; + + if (name != null ? !name.equals(classNode.name) : classNode.name != null) return false; + if (superTypes != null ? !superTypes.equals(classNode.superTypes) : classNode.superTypes != null) return false; + if (fields != null ? !fields.equals(classNode.fields) : classNode.fields != null) return false; + if (constructor != null ? !constructor.equals(classNode.constructor) : classNode.constructor != null) + return false; + return methods != null ? methods.equals(classNode.methods) : classNode.methods == null; + } @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - ClassNode other = (ClassNode) obj; - if (constructor == null) { - if (other.constructor != null) - return false; - } else if (!constructor.equals(other.constructor)) - return false; - if (fields == null) { - if (other.fields != null) - return false; - } else if (!fields.equals(other.fields)) - return false; - if (methods == null) { - if (other.methods != null) - return false; - } else if (!methods.equals(other.methods)) - return false; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; + public int hashCode() { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + (superTypes != null ? superTypes.hashCode() : 0); + result = 31 * result + (fields != null ? fields.hashCode() : 0); + result = 31 * result + (constructor != null ? constructor.hashCode() : 0); + result = 31 * result + (methods != null ? methods.hashCode() : 0); + return result; } } -- cgit v1.2.3