aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-22 09:53:19 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-22 09:53:19 +0000
commit8b5db3defe91189181ec1dcf9ec8f887c9c5d359 (patch)
tree687f2f1cd01a347151bdd414109a086cb2a6aae4
parentf4f6b1d968e3679e81a570a3336026009df6a7d5 (diff)
Generate anonymous class name
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java2
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java12
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);