From 9498aa207ba01a1ab8316ae883a8cb735897522a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 20 Oct 2015 19:27:54 +0100 Subject: Java: read constructors --- .../couscous/frontends/java/JavaReader.java | 48 +++++++++++++--------- 1 file changed, 28 insertions(+), 20 deletions(-) (limited to 'src/main/java/org') 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 04ed784..62aa75a 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -34,6 +34,7 @@ import org.zwobble.couscous.ast.AssignableExpressionNode; import org.zwobble.couscous.ast.AssignmentNode; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.ClassNodeBuilder; +import org.zwobble.couscous.ast.ClassNodeBuilder.MethodBuilder; import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.ExpressionStatementNode; @@ -100,26 +101,33 @@ public class JavaReader { } private static void readMethod(ClassNodeBuilder classBuilder, MethodDeclaration method) { - classBuilder.method( - method.getName().getIdentifier(), - true, - builder -> { - for (Object parameterObject : method.parameters()) { - val parameter = (SingleVariableDeclaration)parameterObject; - builder.argument( - parameter.resolveBinding().getKey(), - parameter.getName().getIdentifier(), - typeOf(parameter.resolveBinding())); - } - - for (Object statement : method.getBody().statements()) { - for (StatementNode intermediateStatement : readStatement((Statement)statement)) { - builder.statement(intermediateStatement); - } - - } - return builder; - }); + if (method.isConstructor()) { + classBuilder.constructor(builder -> buildMethod(method, builder)); + } else { + classBuilder.method( + method.getName().getIdentifier(), + true, + builder -> buildMethod(method, builder)); + } + } + + private static MethodBuilder buildMethod( + MethodDeclaration method, + MethodBuilder builder) { + for (Object parameterObject : method.parameters()) { + val parameter = (SingleVariableDeclaration)parameterObject; + builder.argument( + parameter.resolveBinding().getKey(), + parameter.getName().getIdentifier(), + typeOf(parameter.resolveBinding())); + } + for (Object statement : method.getBody().statements()) { + for (StatementNode intermediateStatement : readStatement((Statement)statement)) { + builder.statement(intermediateStatement); + } + + } + return builder; } private static List readStatement(Statement statement) { -- cgit v1.2.3