Skip to content

Commit 402ae4b

Browse files
committed
Fixing bug that using fields in nested anonymous class may not get
referred correctly
1 parent 57d260d commit 402ae4b

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

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

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2509,9 +2509,42 @@ private void appendFieldName(ASTNode parent, ITypeBinding declaringClass) {
25092509
}
25102510
}
25112511
String binaryName = declaringClass.getBinaryName();
2512-
int idx = levels.indexOf(binaryName);
2512+
int idx = levels.lastIndexOf(binaryName);
25132513
if (idx == -1) {
2514-
idx = classes.indexOf(binaryName);
2514+
idx = classes.lastIndexOf(binaryName);
2515+
if (idx == -1) {
2516+
// Check each super class
2517+
int index = 0;
2518+
ITypeBinding superClass = originalType.getSuperclass();
2519+
while (superClass != null) {
2520+
String superName = superClass.getBinaryName();
2521+
if ("java.lang.Object".equals(superName)) {
2522+
break;
2523+
}
2524+
if (binaryName.equals(superName)) {
2525+
idx = index;
2526+
//break;
2527+
}
2528+
superClass = superClass.getSuperclass();
2529+
}
2530+
ITypeBinding thisDeclaringClass = originalType.getDeclaringClass();
2531+
while (thisDeclaringClass != null) {
2532+
index++;
2533+
superClass = thisDeclaringClass.getSuperclass();
2534+
while (superClass != null) {
2535+
String superName = superClass.getBinaryName();
2536+
if ("java.lang.Object".equals(superName)) {
2537+
break;
2538+
}
2539+
if (binaryName.equals(superName)) {
2540+
idx = index;
2541+
//break;
2542+
}
2543+
superClass = superClass.getSuperclass();
2544+
}
2545+
thisDeclaringClass = thisDeclaringClass.getDeclaringClass();
2546+
}
2547+
}
25152548
}
25162549
if (idx != -1) {
25172550
for (int i = idx + 1; i < levels.size(); i++) {

0 commit comments

Comments
 (0)