diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-22 09:53:19 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-22 09:53:19 +0000 |
| commit | 8b5db3defe91189181ec1dcf9ec8f887c9c5d359 (patch) | |
| tree | 687f2f1cd01a347151bdd414109a086cb2a6aae4 /src/main/java | |
| parent | f4f6b1d968e3679e81a570a3336026009df6a7d5 (diff) | |
Generate anonymous class name
Diffstat (limited to 'src/main/java')
| -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); |
