diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-18 20:08:39 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-18 20:08:39 +0000 |
| commit | b1427f80b354538333d9656683fa2bc5a41fe2a6 (patch) | |
| tree | d1437f4711aaf8e73902e5272388e2ec410e6e43 /src/main/java/org/zwobble/couscous/frontends | |
| parent | a975bb84a99ee6f4e4b4a446642206ba5a7a69c9 (diff) | |
Improve generics support on C# backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 42d8f28..f0d42d4 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -12,6 +12,7 @@ import org.zwobble.couscous.ast.types.ScalarType; import org.zwobble.couscous.ast.types.Type; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.util.ExtraLists; +import org.zwobble.couscous.values.ObjectValues; import java.io.IOException; import java.nio.file.Path; @@ -26,6 +27,7 @@ import static java.util.Collections.emptyList; import static org.zwobble.couscous.ast.AnnotationNode.annotation; import static org.zwobble.couscous.ast.AssignmentNode.assignStatement; import static org.zwobble.couscous.ast.ConstructorNode.constructor; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FieldDeclarationNode.field; import static org.zwobble.couscous.ast.FormalTypeParameterNode.formalTypeParameter; @@ -405,21 +407,23 @@ public class JavaReader { override -> !override.equals(methodNode.signature())), override -> { List<FormalArgumentNode> arguments = eagerMap(override.getArguments(), argument -> scope.formalArgument("arg", argument)); + MethodCallNode call = MethodCallNode.methodCall( + thisReference(type), + methodNode.getName(), + eagerMap(arguments, argument -> reference(argument)), + methodNode.signature()); + + StatementNode body = override.getReturnType().equals(ObjectValues.VOID) + ? expressionStatement(call) + : returns(typeCoercion(call, override.getReturnType())); + return MethodNode.method( methodNode.getAnnotations(), methodNode.isStatic(), methodNode.getName(), arguments, override.getReturnType(), - Optional.of(list( - returns(typeCoercion( - MethodCallNode.methodCall( - thisReference(type), - methodNode.getName(), - eagerMap(arguments, argument -> reference(argument)), - methodNode.signature()), - override.getReturnType())) - ))); + Optional.of(list(body))); }); } |
