From 1cca01d385e68aefe2131319c53c4811101f15f7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 Jan 2016 16:12:32 +0000 Subject: Handle both static and instance method calls in one node --- .../zwobble/couscous/ast/StaticMethodCallNode.java | 120 ++------------------- 1 file changed, 7 insertions(+), 113 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java') diff --git a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java index 4676b67..f16005a 100644 --- a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java @@ -1,20 +1,17 @@ package org.zwobble.couscous.ast; -import java.util.List; -import java.util.function.Function; - -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.InternalCouscousValue; import org.zwobble.couscous.values.ObjectValues; -import static java.util.Arrays.asList; +import java.util.List; + +import static org.zwobble.couscous.ast.StaticReceiver.staticReceiver; import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; -import static org.zwobble.couscous.util.ExtraLists.eagerMap; import static org.zwobble.couscous.util.ExtraLists.list; -public class StaticMethodCallNode implements ExpressionNode { +public class StaticMethodCallNode { public static ExpressionNode same(ExpressionNode left, ExpressionNode right) { return staticMethodCall(InternalCouscousValue.REF, "same", list(left, right), BooleanValue.REF); } @@ -27,7 +24,7 @@ public class StaticMethodCallNode implements ExpressionNode { return typeCoercion(value, IntegerValue.REF); } - public static StaticMethodCallNode staticMethodCall( + public static ExpressionNode staticMethodCall( String className, String methodName, List arguments, @@ -35,114 +32,11 @@ public class StaticMethodCallNode implements ExpressionNode { return staticMethodCall(TypeName.of(className), methodName, arguments, type); } - public static StaticMethodCallNode staticMethodCall( - TypeName className, - String methodName, - List arguments, - TypeName type) { - return new StaticMethodCallNode(className, methodName, arguments, type); - } - - private final TypeName className; - private final String methodName; - private final List arguments; - private final TypeName type; - - public StaticMethodCallNode( + public static ExpressionNode staticMethodCall( TypeName className, String methodName, List arguments, TypeName type) { - this.className = className; - this.methodName = methodName; - this.arguments = arguments; - this.type = type; - } - - public TypeName getClassName() { - return className; - } - - public String getMethodName() { - return methodName; - } - - public List getArguments() { - return arguments; - } - - public TypeName getType() { - return type; - } - - public MethodSignature signature() { - return new MethodSignature(methodName, eagerMap(arguments, argument -> argument.getType())); - } - - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - - @Override - public ExpressionNode replaceExpressions(Function replace) { - return new StaticMethodCallNode( - className, - methodName, - eagerMap(arguments, replace::apply), - type); - } - - @Override - public String toString() { - return "StaticMethodCallNode(className=" + className + ", methodName=" - + methodName + ", arguments=" + arguments + ", type=" + type - + ")"; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result - + ((arguments == null) ? 0 : arguments.hashCode()); - result = prime * result - + ((className == null) ? 0 : className.hashCode()); - result = prime * result - + ((methodName == null) ? 0 : methodName.hashCode()); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - StaticMethodCallNode other = (StaticMethodCallNode) obj; - if (arguments == null) { - if (other.arguments != null) - return false; - } else if (!arguments.equals(other.arguments)) - return false; - if (className == null) { - if (other.className != null) - return false; - } else if (!className.equals(other.className)) - return false; - if (methodName == null) { - if (other.methodName != null) - return false; - } else if (!methodName.equals(other.methodName)) - return false; - if (type == null) { - if (other.type != null) - return false; - } else if (!type.equals(other.type)) - return false; - return true; + return MethodCallNode.methodCall(staticReceiver(className), methodName, arguments, type); } } -- cgit v1.2.3