aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/MethodCallNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java87
1 files changed, 42 insertions, 45 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index adc3b05..3f9b06b 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -87,23 +87,36 @@ public class MethodCallNode implements ExpressionNode {
List<ExpressionNode> arguments,
MethodSignature signature)
{
- return new MethodCallNode(receiver, methodName, arguments, signature);
+ return new MethodCallNode(receiver, methodName, arguments, signature.getReturnType(), signature);
+ }
+
+ public static MethodCallNode methodCall(
+ Receiver receiver,
+ String methodName,
+ List<ExpressionNode> arguments,
+ Type returnType,
+ MethodSignature signature)
+ {
+ return new MethodCallNode(receiver, methodName, arguments, returnType, signature);
}
private final Receiver receiver;
private final String methodName;
private final List<ExpressionNode> arguments;
+ private final Type returnType;
private final MethodSignature signature;
private MethodCallNode(
Receiver receiver,
String methodName,
List<ExpressionNode> arguments,
+ Type returnType,
MethodSignature signature)
{
this.receiver = receiver;
this.methodName = methodName;
this.arguments = arguments;
+ this.returnType = returnType;
this.signature = signature;
}
@@ -121,7 +134,7 @@ public class MethodCallNode implements ExpressionNode {
@Override
public Type getType() {
- return signature.getReturnType();
+ return returnType;
}
public MethodSignature signature() {
@@ -139,59 +152,43 @@ public class MethodCallNode implements ExpressionNode {
transformer.transformReceiver(receiver),
transformer.transformMethodName(signature()),
transformer.transformExpressions(arguments),
+ transformer.transform(returnType),
transformer.transform(signature));
}
@Override
public String toString() {
- return "MethodCallNode(receiver=" + receiver + ", methodName="
- + methodName + ", arguments=" + arguments + ", signature=" + signature
- + ")";
+ return "MethodCallNode(" +
+ "receiver=" + receiver +
+ ", methodName=" + methodName +
+ ", arguments=" + arguments +
+ ", returnType=" + returnType +
+ ", signature=" + signature +
+ ')';
}
@Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((arguments == null) ? 0 : arguments.hashCode());
- result = prime * result
- + ((methodName == null) ? 0 : methodName.hashCode());
- result = prime * result
- + ((receiver == null) ? 0 : receiver.hashCode());
- result = prime * result + ((signature == null) ? 0 : signature.hashCode());
- return result;
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ MethodCallNode that = (MethodCallNode) o;
+
+ if (!receiver.equals(that.receiver)) return false;
+ if (!methodName.equals(that.methodName)) return false;
+ if (!arguments.equals(that.arguments)) return false;
+ if (!returnType.equals(that.returnType)) return false;
+ return signature.equals(that.signature);
+
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- MethodCallNode other = (MethodCallNode) obj;
- if (arguments == null) {
- if (other.arguments != null)
- return false;
- } else if (!arguments.equals(other.arguments))
- return false;
- if (methodName == null) {
- if (other.methodName != null)
- return false;
- } else if (!methodName.equals(other.methodName))
- return false;
- if (receiver == null) {
- if (other.receiver != null)
- return false;
- } else if (!receiver.equals(other.receiver))
- return false;
- if (signature == null) {
- if (other.signature != null)
- return false;
- } else if (!signature.equals(other.signature))
- return false;
- return true;
+ public int hashCode() {
+ int result = receiver.hashCode();
+ result = 31 * result + methodName.hashCode();
+ result = 31 * result + arguments.hashCode();
+ result = 31 * result + returnType.hashCode();
+ result = 31 * result + signature.hashCode();
+ return result;
}
}