aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/ClassNode.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-08 11:01:29 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-08 11:01:29 +0000
commit95669601271985c89a10d673571dd89133f1e2e8 (patch)
tree866d294696522f721cab97b8a1fb020945cf1d75 /src/main/java/org/zwobble/couscous/ast/ClassNode.java
parentc532706e0f20a07be960e4d2ca4d89d850312174 (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.java57
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 +
- ')';
- }
}