aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/InterfaceNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InterfaceNode.java32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
index 854728f..6353a45 100644
--- a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
@@ -9,22 +9,26 @@ import java.util.Set;
public class InterfaceNode implements TypeNode {
public static InterfaceNode declareInterface(
TypeName name,
+ List<FormalTypeParameterNode> typeParameters,
Set<TypeName> superTypes,
List<MethodNode> methods)
{
- return new InterfaceNode(name, superTypes, methods);
+ return new InterfaceNode(name, typeParameters, superTypes, methods);
}
private final TypeName name;
+ private final List<FormalTypeParameterNode> typeParameters;
private final Set<TypeName> superTypes;
private final List<MethodNode> methods;
private InterfaceNode(
TypeName name,
+ List<FormalTypeParameterNode> typeParameters,
Set<TypeName> superTypes,
List<MethodNode> methodNodes)
{
this.name = name;
+ this.typeParameters = typeParameters;
this.superTypes = superTypes;
methods = methodNodes;
}
@@ -35,6 +39,11 @@ public class InterfaceNode implements TypeNode {
}
@Override
+ public List<FormalTypeParameterNode> getTypeParameters() {
+ return typeParameters;
+ }
+
+ @Override
public Set<TypeName> getSuperTypes() {
return superTypes;
}
@@ -50,23 +59,26 @@ public class InterfaceNode implements TypeNode {
}
@Override
- public InterfaceNode transform(NodeTransformer transformer) {
- return new InterfaceNode(
- transformer.transform(name),
- transformer.transformTypes(superTypes),
- transformer.transformMethods(methods));
- }
-
- @Override
public String toString() {
return "InterfaceNode(" +
"name=" + name +
+ ", typeParameters=" + typeParameters +
", superTypes=" + superTypes +
", methods=" + methods +
')';
}
@Override
+ public InterfaceNode transform(NodeTransformer transformer) {
+ return new InterfaceNode(
+ transformer.transform(name),
+ // TODO: transform
+ typeParameters,
+ transformer.transformTypes(superTypes),
+ transformer.transformMethods(methods));
+ }
+
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -74,6 +86,7 @@ public class InterfaceNode implements TypeNode {
InterfaceNode that = (InterfaceNode) o;
if (!name.equals(that.name)) return false;
+ if (!typeParameters.equals(that.typeParameters)) return false;
if (!superTypes.equals(that.superTypes)) return false;
return methods.equals(that.methods);
@@ -82,6 +95,7 @@ public class InterfaceNode implements TypeNode {
@Override
public int hashCode() {
int result = name.hashCode();
+ result = 31 * result + typeParameters.hashCode();
result = 31 * result + superTypes.hashCode();
result = 31 * result + methods.hashCode();
return result;