Skip to content

Commit ddf8471

Browse files
committed
Fix J21 nested inner class synthetic params
1 parent 1b76be3 commit ddf8471

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

src/org/jetbrains/java/decompiler/main/rels/NestedClassProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -807,7 +807,7 @@ private static String getEnclosingVarField(StructClass cl, MethodWrapper method,
807807
StructMethodParametersAttribute attr = method.methodStruct.getAttribute(StructGeneralAttribute.ATTRIBUTE_METHOD_PARAMETERS);
808808

809809
List<StructMethodParametersAttribute.Entry> entries = attr.getEntries();
810-
if (outerIdx < entries.size() && (entries.get(outerIdx).myAccessFlags & CodeConstants.ACC_MANDATED) == CodeConstants.ACC_MANDATED) {
810+
if (outerIdx < entries.size() && (entries.get(outerIdx).myAccessFlags & (CodeConstants.ACC_MANDATED | CodeConstants.ACC_SYNTHETIC)) != 0) {
811811

812812
String name = method.varproc.getVarName(var);
813813
VarType type = method.varproc.getVarType(var);

test/org/jetbrains/java/decompiler/SingleClassesTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,7 @@ private void registerDefault() {
697697
register(JAVA_8, "TestDanglingBoxingCall");
698698
register(JAVA_21, "TestSwitchOnEnumJ21", "ext/TestEnum2");
699699
register(JAVA_21, "TestInnerClassesJ21");
700+
register(JAVA_21, "TestInnerClasses2J21");
700701
register(JAVA_8, "TestInnerClassesJ8");
701702
register(JAVA_8, "TestSwitchInTry");
702703
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package pkg;
2+
3+
public class TestInnerClasses2J21 {
4+
private void test() {
5+
new TestInnerClasses2J21.Inner().new Inner2(true, true);// 5
6+
}// 6
7+
8+
private class Inner {
9+
private class Inner2 {
10+
private Inner2(boolean nonFinal, final boolean finalB) {
11+
TestInnerClasses2J21.this.test();// 11
12+
}// 12
13+
}
14+
}
15+
}
16+
17+
class 'pkg/TestInnerClasses2J21' {
18+
method 'test ()V' {
19+
c 4
20+
d 4
21+
12 5
22+
}
23+
}
24+
25+
class 'pkg/TestInnerClasses2J21$Inner$Inner2' {
26+
method '<init> (Lpkg/TestInnerClasses2J21$Inner;ZZ)V' {
27+
5 10
28+
6 10
29+
7 10
30+
8 10
31+
9 10
32+
a 10
33+
b 11
34+
}
35+
}
36+
37+
Lines mapping:
38+
5 <-> 5
39+
6 <-> 6
40+
11 <-> 11
41+
12 <-> 12
42+
Not mapped:
43+
10
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package pkg;
2+
3+
public class TestInnerClasses2J21 {
4+
private void test() {
5+
new Inner().new Inner2(true, true);
6+
}
7+
8+
private class Inner {
9+
private class Inner2 {
10+
private Inner2(boolean nonFinal, final boolean finalB) {
11+
TestInnerClasses2J21.this.test();
12+
}
13+
}
14+
}
15+
}

0 commit comments

Comments
 (0)