From b69c8f7c8e2c16aade681ceaae046456a5ef2a85 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 6 Jan 2016 08:31:13 +0000 Subject: Partially implement method overloading --- .../org/zwobble/couscous/ast/MethodCallNode.java | 4 ++ .../java/org/zwobble/couscous/ast/MethodNode.java | 8 ++++ .../org/zwobble/couscous/ast/MethodSignature.java | 44 ++++++++++++++++++++++ .../zwobble/couscous/ast/StaticMethodCallNode.java | 4 ++ 4 files changed, 60 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/ast/MethodSignature.java (limited to 'src/main/java/org/zwobble/couscous/ast') diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java index f65a9ae..ba50f17 100644 --- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java @@ -111,6 +111,10 @@ public class MethodCallNode implements ExpressionNode { public TypeName getType() { return type; } + + public MethodSignature signature() { + return new MethodSignature(methodName, eagerMap(arguments, argument -> argument.getType())); + } @Override public T accept(ExpressionNodeMapper visitor) { diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java index 5763b11..86ae649 100644 --- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java +++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java @@ -6,6 +6,8 @@ import org.zwobble.couscous.ast.visitors.NodeMapper; import java.util.List; import java.util.function.Function; +import static org.zwobble.couscous.util.ExtraLists.eagerMap; + public class MethodNode implements CallableNode { public static Builder staticMethod(String name) { return builder(name).isStatic(true); @@ -116,6 +118,12 @@ public class MethodNode implements CallableNode { return body; } + public MethodSignature signature() { + return new MethodSignature( + name, + eagerMap(arguments, argument -> argument.getType())); + } + public MethodNode mapBody(Function, List> function) { return new MethodNode(annotations, isStatic, name, arguments, function.apply(body)); } diff --git a/src/main/java/org/zwobble/couscous/ast/MethodSignature.java b/src/main/java/org/zwobble/couscous/ast/MethodSignature.java new file mode 100644 index 0000000..fb2dc64 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/ast/MethodSignature.java @@ -0,0 +1,44 @@ +package org.zwobble.couscous.ast; + +import java.util.List; +import java.util.Objects; + +public class MethodSignature { + private String name; + private List arguments; + + public MethodSignature(String name, List arguments) { + this.name = name; + this.arguments = arguments; + } + + public String getName() { + return name; + } + + public List getArguments() { + return arguments; + } + + @Override + public String toString() { + return "MethodSignature(" + + "name='" + name + '\'' + + ", arguments=" + arguments + + ')'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MethodSignature that = (MethodSignature) o; + return Objects.equals(name, that.name) && + Objects.equals(arguments, that.arguments); + } + + @Override + public int hashCode() { + return Objects.hash(name, arguments); + } +} diff --git a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java index 7c3b90b..1309c6e 100644 --- a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java @@ -81,6 +81,10 @@ public class StaticMethodCallNode implements ExpressionNode { public TypeName getType() { return type; } + + public MethodSignature signature() { + return new MethodSignature(methodName, eagerMap(arguments, argument -> argument.getType())); + } @Override public T accept(ExpressionNodeMapper visitor) { -- cgit v1.2.3