diff options
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 12 |
2 files changed, 11 insertions, 3 deletions
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 f114801..44960dd 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.frontends.java; -import com.google.common.collect.ImmutableList; import org.eclipse.jdt.core.dom.*; import org.zwobble.couscous.ast.*; import org.zwobble.couscous.values.BooleanValue; @@ -192,7 +191,6 @@ public class JavaExpressionReader { List<ExpressionNode> arguments = readArguments(constructor, javaArguments); if (constructor.getDeclaringClass().isAnonymous()) { - // TODO: generate anonymous class name TypeName anonymousClassName = javaReader.readAnonymousClass(expression.getAnonymousClassDeclaration()); return constructorCall(anonymousClassName, arguments); } else { 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 255cb9f..2395f38 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -24,6 +24,7 @@ public class JavaReader { } private final ImmutableList.Builder<ClassNode> classes; + private int anonymousClassCount = 0; private JavaReader() { classes = ImmutableList.builder(); @@ -36,11 +37,20 @@ public class JavaReader { } TypeName readAnonymousClass(AnonymousClassDeclaration declaration) { - ClassNode classNode = readTypeDeclarationBody("ANONYMOUS", declaration.bodyDeclarations()); + String name = generateClassName(declaration); + ClassNode classNode = readTypeDeclarationBody(name, declaration.bodyDeclarations()); classes.add(classNode); return classNode.getName(); } + private String generateClassName(AnonymousClassDeclaration declaration) { + ITypeBinding type = declaration.resolveBinding(); + while (type.isAnonymous()) { + type = type.getDeclaringClass(); + } + return type.getQualifiedName() + "_Anonymous_" + (anonymousClassCount++); + } + private ClassNode readTypeDeclarationBody(String name, List bodyDeclarations) { ClassNodeBuilder classBuilder = new ClassNodeBuilder(name); readFields(ofType(bodyDeclarations, FieldDeclaration.class), classBuilder); |
