diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java index 712845f..90c6d90 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java @@ -1,3 +1,6 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + */ package org.jetbrains.java.decompiler.modules.decompiler.exps; import org.jetbrains.java.decompiler.code.CodeConstants; @@ -24,7 +27,7 @@ public class ExprUtil { // own class mask = wrapper.getMethodWrapper(CodeConstants.INIT_NAME, descriptor).synthParameters; } - else if (parameters > 0 && node.type == ClassNode.CLASS_MEMBER && node.classStruct.hasModifier(CodeConstants.ACC_STATIC)) { + else if (parameters > 0 && node.type == ClassNode.CLASS_MEMBER && (node.access & CodeConstants.ACC_STATIC) == 0) { // non-static member class mask = new ArrayList<>(Collections.nCopies(parameters, null)); mask.set(0, new VarVersionPair(-1, 0)); diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java index 15da93c..83db194 100644 --- a/test/org/jetbrains/java/decompiler/SingleClassesTest.java +++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java @@ -105,6 +105,7 @@ public class SingleClassesTest { @Test public void testPop2OneLongPop2() { doTest("pkg/TestPop2OneLongPop2"); } @Test public void testPop2TwoIntPop2() { doTest("pkg/TestPop2TwoIntPop2"); } @Test public void testPop2TwoIntTwoPop() { doTest("pkg/TestPop2TwoIntTwoPop"); } + @Test public void testSuperInner2() { doTest("pkg/TestSuperInner2", "pkg/TestSuperInner"); } // TODO: fix all below //@Test public void testPackageInfo() { doTest("pkg/package-info"); } diff --git a/testData/classes/pkg/TestSuperInner$Inner.class b/testData/classes/pkg/TestSuperInner$Inner.class new file mode 100644 index 0000000..1148567 Binary files /dev/null and b/testData/classes/pkg/TestSuperInner$Inner.class differ diff --git a/testData/classes/pkg/TestSuperInner.class b/testData/classes/pkg/TestSuperInner.class new file mode 100644 index 0000000..52fd2e2 Binary files /dev/null and b/testData/classes/pkg/TestSuperInner.class differ diff --git a/testData/classes/pkg/TestSuperInner2$Inner2.class b/testData/classes/pkg/TestSuperInner2$Inner2.class new file mode 100644 index 0000000..ef383b8 Binary files /dev/null and b/testData/classes/pkg/TestSuperInner2$Inner2.class differ diff --git a/testData/classes/pkg/TestSuperInner2.class b/testData/classes/pkg/TestSuperInner2.class new file mode 100644 index 0000000..340b4de Binary files /dev/null and b/testData/classes/pkg/TestSuperInner2.class differ diff --git a/testData/results/TestSuperInner2.dec b/testData/results/TestSuperInner2.dec new file mode 100644 index 0000000..81fbd8e --- /dev/null +++ b/testData/results/TestSuperInner2.dec @@ -0,0 +1,17 @@ +class TestSuperInner2 extends TestSuperInner { + protected class Inner2 extends TestSuperInner.Inner { + protected Inner2() { + super();// 2 + } + } +} + +class 'TestSuperInner2$Inner2' { + method ' (LTestSuperInner2;)V' { + 7 3 + a 4 + } +} + +Lines mapping: +2 <-> 4 diff --git a/testData/src/pkg/TestSuperInner.java b/testData/src/pkg/TestSuperInner.java new file mode 100644 index 0000000..fed5da8 --- /dev/null +++ b/testData/src/pkg/TestSuperInner.java @@ -0,0 +1,6 @@ +public class TestSuperInner { + protected abstract class Inner { + protected Inner() { + } + } +} \ No newline at end of file diff --git a/testData/src/pkg/TestSuperInner2.java b/testData/src/pkg/TestSuperInner2.java new file mode 100644 index 0000000..a16ba8e --- /dev/null +++ b/testData/src/pkg/TestSuperInner2.java @@ -0,0 +1,4 @@ +class TestSuperInner2 extends TestSuperInner { + protected class Inner2 extends Inner { + } +} \ No newline at end of file