diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-28 22:11:11 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-28 22:11:11 +0100 |
| commit | c041a56e321bf0370d6b6e01ef7b12cdbe2ab8e5 (patch) | |
| tree | 77a66d19e3a87e3df1c0ffee6ae68577305cadff /src/main/java/org/zwobble | |
| parent | 196b5c251a4a5ff348b2b681e334147765a10b80 (diff) | |
Support method references when return type is void
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java | 14 |
1 files changed, 8 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 c0c98c4..54ab16a 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java @@ -2,9 +2,7 @@ package org.zwobble.couscous.frontends.java; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.core.dom.*; -import org.zwobble.couscous.ast.ExpressionNode; -import org.zwobble.couscous.ast.FormalArgumentNode; -import org.zwobble.couscous.ast.VariableReferenceNode; +import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.sugar.Lambda; import org.zwobble.couscous.types.Type; import org.zwobble.couscous.types.Types; @@ -13,6 +11,7 @@ import java.util.List; import java.util.function.Function; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.MethodCallNode.methodCall; import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall; import static org.zwobble.couscous.ast.ReturnNode.returns; @@ -52,9 +51,12 @@ public class JavaMethodReferenceReader { List<FormalArgumentNode> formalArguments = formalArguments(scope, functionalInterfaceMethod); List<ExpressionNode> arguments = eagerMap(formalArguments, VariableReferenceNode::reference); - return lambda( - formalArguments, - list(returns(coerce(generateValue.apply(arguments), typeOf(functionalInterfaceMethod.getReturnType()))))); + ExpressionNode value = generateValue.apply(arguments); + Type type = typeOf(functionalInterfaceMethod.getReturnType()); + List<StatementNode> body = type.equals(Types.VOID) + ? list(expressionStatement(value)) + : list(returns(coerce(value, type))); + return lambda(formalArguments, body); } private List<FormalArgumentNode> formalArguments(Scope scope, IMethodBinding functionalInterfaceMethod) { |
