From f4f6b1d968e3679e81a570a3336026009df6a7d5 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Nov 2015 09:46:30 +0000 Subject: Read anonymous classes in JavaReader --- .../zwobble/couscous/frontends/java/JavaExpressionReader.java | 7 ++----- .../java/org/zwobble/couscous/frontends/java/JavaReader.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java index 11fa612..f114801 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -21,11 +21,9 @@ import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; public class JavaExpressionReader { private final JavaReader javaReader; - private final ImmutableList.Builder classes; - JavaExpressionReader(JavaReader javaReader, ImmutableList.Builder classes) { + JavaExpressionReader(JavaReader javaReader) { this.javaReader = javaReader; - this.classes = classes; } ExpressionNode readExpression(TypeName targetType, Expression expression) { @@ -195,8 +193,7 @@ public class JavaExpressionReader { if (constructor.getDeclaringClass().isAnonymous()) { // TODO: generate anonymous class name - TypeName anonymousClassName = TypeName.of("ANONYMOUS"); - classes.add(javaReader.readTypeDeclarationBody("ANONYMOUS", expression.getAnonymousClassDeclaration().bodyDeclarations())); + TypeName anonymousClassName = javaReader.readAnonymousClass(expression.getAnonymousClassDeclaration()); return constructorCall(anonymousClassName, arguments); } else { return constructorCall(typeOf(expression), arguments); 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 0eb5817..255cb9f 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -35,7 +35,13 @@ public class JavaReader { return readTypeDeclarationBody(name, type.bodyDeclarations()); } - ClassNode readTypeDeclarationBody(String name, List bodyDeclarations) { + TypeName readAnonymousClass(AnonymousClassDeclaration declaration) { + ClassNode classNode = readTypeDeclarationBody("ANONYMOUS", declaration.bodyDeclarations()); + classes.add(classNode); + return classNode.getName(); + } + + private ClassNode readTypeDeclarationBody(String name, List bodyDeclarations) { ClassNodeBuilder classBuilder = new ClassNodeBuilder(name); readFields(ofType(bodyDeclarations, FieldDeclaration.class), classBuilder); readMethods(ofType(bodyDeclarations, MethodDeclaration.class), classBuilder); @@ -83,7 +89,7 @@ public class JavaReader { Optional returnType = method.getReturnType2() == null ? Optional.empty() : Optional.of(typeOf(method.getReturnType2())); - JavaStatementReader statementReader = new JavaStatementReader(new JavaExpressionReader(this, classes), returnType); + JavaStatementReader statementReader = new JavaStatementReader(new JavaExpressionReader(this), returnType); for (Object statement : method.getBody().statements()) { for (StatementNode intermediateStatement : statementReader.readStatement((Statement)statement)) { builder.statement(intermediateStatement); -- cgit v1.2.3