diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-06 08:31:13 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-06 08:31:13 +0000 |
| commit | b69c8f7c8e2c16aade681ceaae046456a5ef2a85 (patch) | |
| tree | 6737fa9da75bc4dc5cd9cf620ac6b8f686aebae6 /src/main/java/org/zwobble/couscous/ast | |
| parent | e4229671c4cf6db860fc6cf68bcfb8fdd69fdcb8 (diff) | |
Partially implement method overloading
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
4 files changed, 60 insertions, 0 deletions
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> T accept(ExpressionNodeMapper<T> 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<StatementNode>, List<StatementNode>> 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<TypeName> arguments; + + public MethodSignature(String name, List<TypeName> arguments) { + this.name = name; + this.arguments = arguments; + } + + public String getName() { + return name; + } + + public List<TypeName> 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> T accept(ExpressionNodeMapper<T> visitor) { |
