diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-10 20:44:51 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-10 20:44:51 +0100 |
| commit | 0dde3d8022966762c090687b6945c496eb8a168c (patch) | |
| tree | e884788c9ed8466e88b1002c166ab31e901ce0e3 | |
| parent | bc72e3b1a1c07f0c6efbb54867de412abd9480ef (diff) | |
Add reading of reference to zero-arg methods
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java | 22 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java | 11 |
2 files changed, 27 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java index db88310..4930ee4 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java @@ -81,11 +81,23 @@ public class JavaMethodReferenceReader { arguments, type); } else { - return methodCall( - javaReader.readExpressionWithoutBoxing(scope, expression.getExpression()), - methodName, - arguments, - type); + Expression left = expression.getExpression(); + if (left instanceof SimpleName && ((SimpleName) left).resolveBinding().getKind() == IBinding.TYPE) { + if (arguments.size() != 1) { + throw new UnsupportedOperationException(); + } + return methodCall( + arguments.get(0), + methodName, + list(), + type); + } else { + return methodCall( + javaReader.readExpressionWithoutBoxing(scope, left), + methodName, + arguments, + type); + } } } } diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java index e7585ec..9901931 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java @@ -39,7 +39,7 @@ public class InnerTypeReadingTests { } @Test - public void expressionMethodReferenceWithStaticReceiverIsReadAsLambda() { + public void expressionStaticMethodReferenceWithStaticReceiverIsReadAsLambda() { assertEquals( readTypes(generateMethodSource("void", "java.util.function.Function<String, Integer> function = arg0 -> Integer.parseInt(arg0);")), @@ -48,6 +48,15 @@ public class InnerTypeReadingTests { } @Test + public void expressionInstanceMethodReferenceWithStaticReceiverIsReadAsLambda() { + assertEquals( + readTypes(generateMethodSource("void", + "java.util.function.Function<String, Integer> function = arg0 -> arg0.length();")), + readTypes(generateMethodSource("void", + "java.util.function.Function<String, Integer> function = String::length;"))); + } + + @Test public void expressionConstructorReferenceWithStaticReceiverIsReadAsLambda() { assertEquals( readTypes(generateMethodSource("void", |
