aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-17 16:32:26 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-17 16:32:26 +0100
commit8e1a00cbd324c6db57b384a30442e1be7a7ff9fe (patch)
tree88573286f8383cd5f0347d76bbfdf59fcb74d70e /src/main/java/org/zwobble
parent36b8ac144eed4fa94c8dd559b449604b0255ffb4 (diff)
Java: read field declarations
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java47
1 files changed, 36 insertions, 11 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 d0b3f17..8037540 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -11,9 +11,11 @@ import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ConditionalExpression;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.FieldAccess;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.NumberLiteral;
@@ -23,6 +25,7 @@ import org.eclipse.jdt.core.dom.Statement;
import org.eclipse.jdt.core.dom.StringLiteral;
import org.eclipse.jdt.core.dom.ThisExpression;
import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.zwobble.couscous.ast.AssignableExpressionNode;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
@@ -60,22 +63,44 @@ public class JavaReader {
val type = (TypeDeclaration)ast.types().get(0);
- for (val method : type.getMethods()) {
- classBuilder.method(
- method.getName().getIdentifier(),
- true,
- builder -> {
- for (Object statement : method.getBody().statements()) {
- builder.statement(readStatement((Statement)statement));
- }
- return builder;
- });
- }
+ readFields(type, classBuilder);
+ readMethods(type, classBuilder);
return classBuilder
.build();
}
+ private static void readFields(TypeDeclaration type, ClassNodeBuilder classBuilder) {
+ for (val field : type.getFields()) {
+ readField(field, classBuilder);
+ }
+ }
+
+ private static void readField(FieldDeclaration field, ClassNodeBuilder classBuilder) {
+ for (val fragment : field.fragments()) {
+ val name = ((VariableDeclarationFragment)fragment).getName().getIdentifier();
+ classBuilder.field(name, typeOf(field.getType().resolveBinding()));
+ }
+ }
+
+ private static void readMethods(TypeDeclaration type, ClassNodeBuilder classBuilder) {
+ for (val method : type.getMethods()) {
+ readMethod(classBuilder, method);
+ }
+ }
+
+ private static void readMethod(ClassNodeBuilder classBuilder, MethodDeclaration method) {
+ classBuilder.method(
+ method.getName().getIdentifier(),
+ true,
+ builder -> {
+ for (Object statement : method.getBody().statements()) {
+ builder.statement(readStatement((Statement)statement));
+ }
+ return builder;
+ });
+ }
+
private static StatementNode readStatement(Statement statement) {
switch (statement.getNodeType()) {
case ASTNode.RETURN_STATEMENT: