From 0bb1f6801c3b8e72eef8859b27e672f3c40dbca9 Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Thu, 11 Jan 2018 11:23:40 +0300 Subject: [PATCH] fixed synthetic params --- .../modules/decompiler/exps/ExprUtil.java | 5 ++++- .../java/decompiler/SingleClassesTest.java | 1 + .../classes/pkg/TestSuperInner$Inner.class | Bin 0 -> 425 bytes testData/classes/pkg/TestSuperInner.class | Bin 0 -> 332 bytes .../classes/pkg/TestSuperInner2$Inner2.class | Bin 0 -> 487 bytes testData/classes/pkg/TestSuperInner2.class | Bin 0 -> 336 bytes testData/results/TestSuperInner2.dec | 17 +++++++++++++++++ testData/src/pkg/TestSuperInner.java | 6 ++++++ testData/src/pkg/TestSuperInner2.java | 4 ++++ 9 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 testData/classes/pkg/TestSuperInner$Inner.class create mode 100644 testData/classes/pkg/TestSuperInner.class create mode 100644 testData/classes/pkg/TestSuperInner2$Inner2.class create mode 100644 testData/classes/pkg/TestSuperInner2.class create mode 100644 testData/results/TestSuperInner2.dec create mode 100644 testData/src/pkg/TestSuperInner.java create mode 100644 testData/src/pkg/TestSuperInner2.java 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 0000000000000000000000000000000000000000..1148567a037fcfdc2eef748a2cc629cc23740621 GIT binary patch literal 425 zcmZ8d%SyvQ6g@YYHa5mKHZ|%}=%QAzF5D?DEC@o-MN9XSIOvp^NFM%|3lUuS0e+Nt zC)GvEEbg2K=RUrFKED8*bf)g==U5eU8K=zjqdbx6LKfQKKT?=RgjN$y@R~YJWmzhw z!;J>R{~6p_UKfeF(Iz-pAMtc4U!{i@+8!M2J2)T=)-9_X-p*JjsmvZH_wiCC6~P{v zCA#Z=al{uAd@S;P6KsBr9c*#!FuI1t4{*mP@1XGqtT#p$T*Ebr%|3x`#^K5d4?RXk VH;Kfo&&a|qx(&;-V1OMVegPH#S%Clm literal 0 HcmV?d00001 diff --git a/testData/classes/pkg/TestSuperInner.class b/testData/classes/pkg/TestSuperInner.class new file mode 100644 index 0000000000000000000000000000000000000000..52fd2e2dbe20e435a5be391d9e0b48c4796397a7 GIT binary patch literal 332 zcmY*VK~BRk5S(q320~~{+Ycad01o8B4b)2|q)JgawCddnD{vJYei0FSD= zwz$NWX1z1BW7&VlpI-ovn8oO09N{X$B*K&sE{$PJNPJzCs;;>v44$>o&79D`z1tFk zMfJvnQKk*A+RvQrM&+e2ldLLKxm8xX{+|q*4=owvY{PZ4Zok<2@FzmNu3B60i*~cq zuKci5dzB!<8DZF!B+H3usmy!&n(w%12(zx|#@~T!^yGzZk!%SQJeMx@JrLf1gAPLU e5DN~3cGe5Q#GgZ{mtG%w9Ek_wl~0hFFbGcdsYU_- literal 0 HcmV?d00001 diff --git a/testData/classes/pkg/TestSuperInner2$Inner2.class b/testData/classes/pkg/TestSuperInner2$Inner2.class new file mode 100644 index 0000000000000000000000000000000000000000..ef383b8301fddb6a9e52f4d7f076bc881779f7bb GIT binary patch literal 487 zcmZWl%Syvg5IvLLCN_;tn#Nim8=(trK}6hDbWsq5;HIVfv|cb0lah!3k=x zD9AF&{Gi@q_&0|+ONw+Q??R>R)#f~Z4qgKbP3RU392htx^lLdADFa7a^;L+_EV~hU z^;IWoQ@bWe==^7J!lxB{WpW%fi}Dy7*x|p$=oT73pgkJDgGS>IXm1QPm~3@UQhu9l hzeT5|NJAGL{$2JO@UY8G1lJ6N_yuT{Yn=c9 literal 0 HcmV?d00001 diff --git a/testData/classes/pkg/TestSuperInner2.class b/testData/classes/pkg/TestSuperInner2.class new file mode 100644 index 0000000000000000000000000000000000000000..340b4de1bca97c26dd9a591d1d3f5a503a9cd5ec GIT binary patch literal 336 zcmZ9I&1%9x6ot>#XxcPtwc@%97qyED(w(K7K%o%2QQVI@;FL6xN#c9C61wOE_)yZ5 z#ElNzd(V9LkD24?_Yc4;`X1`IchPmxbMYW(e#Wu36MlWh!Vbi=t$vsu2?w%Rfkc(Ww8EB#@L z=KfXwnDQfWOn (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