aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-18 20:08:39 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-18 20:08:39 +0000
commitb1427f80b354538333d9656683fa2bc5a41fe2a6 (patch)
treed1437f4711aaf8e73902e5272388e2ec410e6e43 /src/main/java/org/zwobble/couscous/frontends
parenta975bb84a99ee6f4e4b4a446642206ba5a7a69c9 (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.java22
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)));
});
}