diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java | 10 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/InnerTypeReadingTests.java | 14 |
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() { |
