aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-09 16:14:57 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-09 16:14:57 +0100
commit828f7b76300cfd803917aa3b780074b5535f45ab (patch)
tree4a55731527f5646943fecc2a3bb1cccb4be0856d /src/main/java
parent01b160e4ccca418410eb566a654bfebe6a0913a2 (diff)
Add type parameters to MethodCallNode
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index 27e7e14..7e3675b 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -1,9 +1,9 @@
package org.zwobble.couscous.ast;
-import org.zwobble.couscous.types.ScalarType;
-import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
+import org.zwobble.couscous.types.ScalarType;
+import org.zwobble.couscous.types.Type;
import java.util.List;
@@ -91,11 +91,23 @@ public class MethodCallNode implements ExpressionNode {
Type returnType,
MethodSignature signature)
{
- return new MethodCallNode(receiver, methodName, arguments, returnType, signature);
+ return methodCall(receiver, methodName, list(), arguments, returnType, signature);
+ }
+
+ public static MethodCallNode methodCall(
+ Receiver receiver,
+ String methodName,
+ List<Type> typeParameters,
+ List<ExpressionNode> arguments,
+ Type returnType,
+ MethodSignature signature)
+ {
+ return new MethodCallNode(receiver, methodName, typeParameters, arguments, returnType, signature);
}
private final Receiver receiver;
private final String methodName;
+ private final List<Type> typeParameters;
private final List<ExpressionNode> arguments;
private final Type returnType;
private final MethodSignature signature;
@@ -103,12 +115,14 @@ public class MethodCallNode implements ExpressionNode {
private MethodCallNode(
Receiver receiver,
String methodName,
+ List<Type> typeParameters,
List<ExpressionNode> arguments,
Type returnType,
MethodSignature signature)
{
this.receiver = receiver;
this.methodName = methodName;
+ this.typeParameters = typeParameters;
this.arguments = arguments;
this.returnType = returnType;
this.signature = signature;
@@ -145,6 +159,7 @@ public class MethodCallNode implements ExpressionNode {
return new MethodCallNode(
transformer.transformReceiver(receiver),
transformer.transformMethodName(signature()),
+ eagerMap(typeParameters, transformer::transform),
transformer.transformExpressions(arguments),
transformer.transform(returnType),
transformer.transform(signature));
@@ -155,6 +170,7 @@ public class MethodCallNode implements ExpressionNode {
return "MethodCallNode(" +
"receiver=" + receiver +
", methodName=" + methodName +
+ ", typeParameters=" + typeParameters +
", arguments=" + arguments +
", returnType=" + returnType +
", signature=" + signature +
@@ -170,6 +186,7 @@ public class MethodCallNode implements ExpressionNode {
if (!receiver.equals(that.receiver)) return false;
if (!methodName.equals(that.methodName)) return false;
+ if (!typeParameters.equals(that.typeParameters)) return false;
if (!arguments.equals(that.arguments)) return false;
if (!returnType.equals(that.returnType)) return false;
return signature.equals(that.signature);
@@ -180,6 +197,7 @@ public class MethodCallNode implements ExpressionNode {
public int hashCode() {
int result = receiver.hashCode();
result = 31 * result + methodName.hashCode();
+ result = 31 * result + typeParameters.hashCode();
result = 31 * result + arguments.hashCode();
result = 31 * result + returnType.hashCode();
result = 31 * result + signature.hashCode();