aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-20 19:27:54 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-20 19:27:54 +0100
commit9498aa207ba01a1ab8316ae883a8cb735897522a (patch)
tree41aa3d899d936215abc5d83eb082ab209dfe9284 /src/main/java
parentd0b2d1e1b447b2bb7b5f5275dfbc3bbd44b6c87b (diff)
Java: read constructors
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java48
1 files changed, 28 insertions, 20 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 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 <T> MethodBuilder<T> buildMethod(
+ MethodDeclaration method,
+ MethodBuilder<T> 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<StatementNode> readStatement(Statement statement) {