diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-13 14:36:16 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-13 14:36:16 +0000 |
| commit | 2d24979f47af2027de780fc956fa37829edafe40 (patch) | |
| tree | 294ad60501120e22e425af9ae66a276b1f636c6a /src/main/java/org/zwobble | |
| parent | 0102779512e4475a32c95f0d84d704bcef7d38fe (diff) | |
Read instance initializers
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java | 12 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 6 |
2 files changed, 12 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java b/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java index 666d777..048ce73 100644 --- a/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java +++ b/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java @@ -2,6 +2,7 @@ package org.zwobble.couscous.ast.sugar; import com.google.common.collect.ImmutableList; import org.zwobble.couscous.ast.*; +import org.zwobble.couscous.util.ExtraLists; import java.util.List; @@ -13,6 +14,7 @@ public class TypeDeclarationBody { public static class Builder { private final ImmutableList.Builder<FieldDeclarationNode> fields = ImmutableList.builder(); private final ImmutableList.Builder<StatementNode> staticConstructor = ImmutableList.builder(); + private final ImmutableList.Builder<StatementNode> instanceInitializers = ImmutableList.builder(); private ConstructorNode constructor = ConstructorNode.DEFAULT; private final ImmutableList.Builder<MethodNode> methods = ImmutableList.builder(); @@ -23,11 +25,11 @@ public class TypeDeclarationBody { fields.add(field); } - public void addStaticInitializer(List<StatementNode> statements) { - staticConstructor.addAll(statements); + public void addInitializer(boolean isStatic, List<StatementNode> statements) { + (isStatic ? staticConstructor : instanceInitializers).addAll(statements); } - public void addStaticInitializer(StatementNode statement) { + public void addInitializer(StatementNode statement) { staticConstructor.add(statement); } @@ -43,7 +45,9 @@ public class TypeDeclarationBody { return new TypeDeclarationBody( fields.build(), staticConstructor.build(), - constructor, + ConstructorNode.constructor( + constructor.getArguments(), + ExtraLists.concat(instanceInitializers.build(), constructor.getBody())), methods.build()); } } 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 b66fe0d..483ea24 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -240,7 +240,9 @@ public class JavaReader { Casts.tryCast(Initializer.class, declaration) // TODO: handle instance initializer - .ifPresent(initializer -> body.addStaticInitializer(readStatement(scope, initializer.getBody()))); + .ifPresent(initializer -> body.addInitializer( + Modifier.isStatic(initializer.getModifiers()), + readStatement(scope, initializer.getBody()))); Casts.tryCast(FieldDeclaration.class, declaration) .ifPresent(field -> readField(body, scope, type, field)); @@ -258,7 +260,7 @@ public class JavaReader { if (fragment.getInitializer() != null) { ExpressionNode value = readExpression(scope, type, fragment.getInitializer()); String name = fragment.getName().getIdentifier(); - builder.addStaticInitializer(assignStatement(fieldAccess(declaringType, name, type), value)); + builder.addInitializer(assignStatement(fieldAccess(declaringType, name, type), value)); } }); |
