diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java index 712845fca418..90c6d90c9fb6 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/ExprUtil.java +++ b/plugins/java-decompiler/engine/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/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java index 15da93c15fc3..83db194a2f76 100644 --- a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java +++ b/plugins/java-decompiler/engine/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/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner$Inner.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner$Inner.class new file mode 100644 index 000000000000..1148567a037f Binary files /dev/null and b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner$Inner.class differ diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner.class new file mode 100644 index 000000000000..52fd2e2dbe20 Binary files /dev/null and b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner.class differ diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner2$Inner2.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner2$Inner2.class new file mode 100644 index 000000000000..ef383b8301fd Binary files /dev/null and b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner2$Inner2.class differ diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner2.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner2.class new file mode 100644 index 000000000000..340b4de1bca9 Binary files /dev/null and b/plugins/java-decompiler/engine/testData/classes/pkg/TestSuperInner2.class differ diff --git a/plugins/java-decompiler/engine/testData/results/TestSuperInner2.dec b/plugins/java-decompiler/engine/testData/results/TestSuperInner2.dec new file mode 100644 index 000000000000..81fbd8eb86fe --- /dev/null +++ b/plugins/java-decompiler/engine/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/plugins/java-decompiler/engine/testData/src/pkg/TestSuperInner.java b/plugins/java-decompiler/engine/testData/src/pkg/TestSuperInner.java new file mode 100644 index 000000000000..fed5da8f3182 --- /dev/null +++ b/plugins/java-decompiler/engine/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/plugins/java-decompiler/engine/testData/src/pkg/TestSuperInner2.java b/plugins/java-decompiler/engine/testData/src/pkg/TestSuperInner2.java new file mode 100644 index 000000000000..a16ba8ebf1d8 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/pkg/TestSuperInner2.java @@ -0,0 +1,4 @@ +class TestSuperInner2 extends TestSuperInner { + protected class Inner2 extends Inner { + } +} \ No newline at end of file