aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java22
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java11
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",