diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-08 11:01:29 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-08 11:01:29 +0000 |
| commit | 95669601271985c89a10d673571dd89133f1e2e8 (patch) | |
| tree | 866d294696522f721cab97b8a1fb020945cf1d75 /src/main/java/org/zwobble/couscous/ast/ClassNode.java | |
| parent | c532706e0f20a07be960e4d2ca4d89d850312174 (diff) | |
Read formal type parameters
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/ClassNode.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/ClassNode.java | 57 |
1 files changed, 37 insertions, 20 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java index bdb3499..745fb64 100644 --- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java @@ -15,16 +15,19 @@ public class ClassNode implements TypeNode { } public static ClassNode declareClass( - TypeName name, - Set<TypeName> superTypes, - List<FieldDeclarationNode> fields, - List<StatementNode> staticConstructor, - ConstructorNode constructor, - List<MethodNode> methods) { - return new ClassNode(name, superTypes, fields, staticConstructor, constructor, methods); + TypeName name, + List<FormalTypeParameterNode> typeParameters, + Set<TypeName> superTypes, + List<FieldDeclarationNode> fields, + List<StatementNode> staticConstructor, + ConstructorNode constructor, + List<MethodNode> methods) + { + return new ClassNode(name, typeParameters, superTypes, fields, staticConstructor, constructor, methods); } private final TypeName name; + private final List<FormalTypeParameterNode> typeParameters; private final Set<TypeName> superTypes; private final List<FieldDeclarationNode> fields; private final List<StatementNode> staticConstructor; @@ -33,6 +36,7 @@ public class ClassNode implements TypeNode { public ClassNode( TypeName name, + List<FormalTypeParameterNode> typeParameters, Set<TypeName> superTypes, List<FieldDeclarationNode> fields, List<StatementNode> staticConstructor, @@ -40,6 +44,7 @@ public class ClassNode implements TypeNode { List<MethodNode> methodNodes) { this.name = name; + this.typeParameters = typeParameters; this.superTypes = superTypes; this.fields = fields; this.staticConstructor = staticConstructor; @@ -53,6 +58,11 @@ public class ClassNode implements TypeNode { } @Override + public List<FormalTypeParameterNode> getTypeParameters() { + return typeParameters; + } + + @Override public Set<TypeName> getSuperTypes() { return superTypes; } @@ -87,13 +97,30 @@ public class ClassNode implements TypeNode { public ClassNode transform(NodeTransformer transformer) { return new ClassNode( transformer.transform(name), + // TODO: transform + typeParameters, transformer.transformTypes(superTypes), transformer.transformFields(fields), - staticConstructor, transformer.transformConstructor(constructor), + // TODO: transform + staticConstructor, + transformer.transformConstructor(constructor), transformer.transformMethods(methods)); } @Override + public String toString() { + return "ClassNode(" + + "name=" + name + + ", typeParameters=" + typeParameters + + ", superTypes=" + superTypes + + ", fields=" + fields + + ", staticConstructor=" + staticConstructor + + ", constructor=" + constructor + + ", methods=" + methods + + ')'; + } + + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; @@ -101,6 +128,7 @@ public class ClassNode implements TypeNode { ClassNode classNode = (ClassNode) o; if (!name.equals(classNode.name)) return false; + if (!typeParameters.equals(classNode.typeParameters)) return false; if (!superTypes.equals(classNode.superTypes)) return false; if (!fields.equals(classNode.fields)) return false; if (!staticConstructor.equals(classNode.staticConstructor)) return false; @@ -112,6 +140,7 @@ public class ClassNode implements TypeNode { @Override public int hashCode() { int result = name.hashCode(); + result = 31 * result + typeParameters.hashCode(); result = 31 * result + superTypes.hashCode(); result = 31 * result + fields.hashCode(); result = 31 * result + staticConstructor.hashCode(); @@ -119,16 +148,4 @@ public class ClassNode implements TypeNode { result = 31 * result + methods.hashCode(); return result; } - - @Override - public String toString() { - return "ClassNode(" + - "name=" + name + - ", superTypes=" + superTypes + - ", fields=" + fields + - ", staticConstructor=" + staticConstructor + - ", constructor=" + constructor + - ", methods=" + methods + - ')'; - } } |
