Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 03d84fa

Browse files
committed
Fixed bug that compiling anonymous classes with depth > 2 may generate
incorrect references to prior level class
1 parent 545fe52 commit 03d84fa

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

sources/net.sf.j2s.core/src/net/sf/j2s/core/astvisitors/ASTScriptVisitor.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2495,19 +2495,38 @@ private void appendFieldName(ASTNode parent, ITypeBinding declaringClass) {
24952495
buffer.append("this.callbacks[\"");
24962496
//buffer.append(shortenQualifiedName(name));
24972497
StringBuilder dollarBuilder = new StringBuilder();
2498+
ArrayList<String> levels = new ArrayList<String>();
2499+
ArrayList<String> classes = new ArrayList<String>();
24982500
if (originalType != null) {
2501+
levels.add(originalType.getBinaryName());
2502+
classes.add(originalType.getSuperclass().getBinaryName());
24992503
ITypeBinding thisDeclaringClass = originalType.getDeclaringClass();
25002504
while (thisDeclaringClass != null) {
2505+
levels.add(thisDeclaringClass.getBinaryName());
2506+
classes.add(thisDeclaringClass.getSuperclass().getBinaryName());
25012507
dollarBuilder.append("$");
25022508
thisDeclaringClass = thisDeclaringClass.getDeclaringClass();
25032509
}
25042510
}
2505-
declaringClass = declaringClass.getDeclaringClass();
2506-
while (declaringClass != null) {
2507-
if (dollarBuilder.length() > 0) {
2508-
dollarBuilder.deleteCharAt(0);
2511+
String binaryName = declaringClass.getBinaryName();
2512+
int idx = levels.indexOf(binaryName);
2513+
if (idx == -1) {
2514+
idx = classes.indexOf(binaryName);
2515+
}
2516+
if (idx != -1) {
2517+
for (int i = idx + 1; i < levels.size(); i++) {
2518+
if (dollarBuilder.length() > 0) {
2519+
dollarBuilder.deleteCharAt(0);
2520+
}
25092521
}
2522+
} else {
25102523
declaringClass = declaringClass.getDeclaringClass();
2524+
while (declaringClass != null) {
2525+
if (dollarBuilder.length() > 0) {
2526+
dollarBuilder.deleteCharAt(0);
2527+
}
2528+
declaringClass = declaringClass.getDeclaringClass();
2529+
}
25112530
}
25122531
buffer.append(dollarBuilder);
25132532
buffer.append("\"].");

0 commit comments

Comments
 (0)