aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java10
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java14
2 files changed, 22 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java
index 75391f7..7a4d52b 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java
@@ -1,14 +1,17 @@
package org.zwobble.couscous.frontends.java;
import org.eclipse.jdt.core.dom.*;
+import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.FormalArgumentNode;
import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.ast.sugar.Lambda;
import org.zwobble.couscous.types.Type;
+import org.zwobble.couscous.types.Types;
import java.util.List;
import java.util.Optional;
+import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement;
import static org.zwobble.couscous.ast.ReturnNode.returns;
import static org.zwobble.couscous.ast.sugar.Lambda.lambda;
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
@@ -50,7 +53,12 @@ public class JavaLambdaExpressionReader {
return reader.readStatements(scope, statements, Optional.of(returnType));
} else {
Expression body = (Expression) expression.getBody();
- return list(returns(reader.readExpression(scope, returnType, body)));
+ ExpressionNode value = reader.readExpression(scope, returnType, body);
+ if (returnType.equals(Types.VOID)) {
+ return list(expressionStatement(value));
+ } else {
+ return list(returns(value));
+ }
}
}
}
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 8f5c305..0c6245c 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
@@ -8,7 +8,7 @@ import static org.zwobble.couscous.tests.frontends.java.JavaReading.readTypes;
public class InnerTypeReadingTests {
@Test
- public void lambdaWithNoArgumentsAndExpressionBodyIsReadAsAnonymousClassCreation() {
+ public void lambdaWithNoArgumentsAndReturnValueAndExpressionBodyIsReadAsAnonymousClassCreation() {
assertEquals(
readTypes(generateMethodSource("void",
"java.util.function.IntSupplier supplier = new java.util.function.IntSupplier() {\n" +
@@ -37,6 +37,18 @@ public class InnerTypeReadingTests {
readTypes(generateMethodSource("void",
"java.util.function.Function<Integer, Integer> function = (Integer x) -> x;")));
}
+ @Test
+ public void lambdaWithNoReturnValueAndExpressionBodyIsReadAsAnonymousClassCreation() {
+ assertEquals(
+ readTypes(generateMethodSource("void",
+ "java.lang.Runnable runnable = new java.lang.Runnable() {\n" +
+ " public void run() {\n" +
+ " System.out.println();\n" +
+ " }\n" +
+ "};")),
+ readTypes(generateMethodSource("void",
+ "java.lang.Runnable runnable = () -> System.out.println();")));
+ }
@Test
public void expressionStaticMethodReferenceWithStaticReceiverIsReadAsLambda() {