From 26b21b852efb2b60aac9ae4caefded67806b76a9 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Tue, 10 Sep 2024 17:20:06 +0200 Subject: [PATCH] [java-decompiler] IDEA-346312 adapt patches - more tests for enums, generics GitOrigin-RevId: d4c15a9094aec2a789f41d745ecd2d88845a9eb8 --- .../modules/decompiler/exps/Exprent.java | 2 +- .../java/decompiler/SingleClassesTest.java | 2 + .../classes/pkg/TestEnumInit$TestEnum.class | Bin 0 -> 1189 bytes .../classes/pkg/TestEnumInit$TestEnum1.class | Bin 0 -> 1306 bytes .../classes/pkg/TestEnumInit$TestEnum2.class | Bin 0 -> 1387 bytes .../testData/classes/pkg/TestEnumInit.class | Bin 0 -> 592 bytes .../classes/pkg/TestInitGeneric$A.class | Bin 0 -> 725 bytes .../classes/pkg/TestInitGeneric$B.class | Bin 0 -> 870 bytes .../classes/pkg/TestInitGeneric$C.class | Bin 0 -> 1273 bytes .../classes/pkg/TestInitGeneric.class | Bin 0 -> 821 bytes .../engine/testData/results/TestEnumInit.dec | 74 ++++++++++++ .../testData/results/TestInitGeneric.dec | 111 ++++++++++++++++++ .../engine/testData/src/pkg/TestEnumInit.java | 38 ++++++ .../testData/src/pkg/TestInitGeneric.java | 45 +++++++ 14 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit$TestEnum.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit$TestEnum1.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit$TestEnum2.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$A.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$B.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$C.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric.class create mode 100644 plugins/java-decompiler/engine/testData/results/TestEnumInit.dec create mode 100644 plugins/java-decompiler/engine/testData/results/TestInitGeneric.dec create mode 100644 plugins/java-decompiler/engine/testData/src/pkg/TestEnumInit.java create mode 100644 plugins/java-decompiler/engine/testData/src/pkg/TestInitGeneric.java diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/Exprent.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/Exprent.java index 2f9a93763d4b..13ac3dfbca6c 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/Exprent.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/Exprent.java @@ -326,7 +326,7 @@ public abstract class Exprent implements IMatchable { } List lstAllExprents = getAllExprents(); - if (lstAllExprents == null || lstAllExprents.isEmpty()) { + if (lstAllExprents.isEmpty()) { return null; } 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 0eef3ef2ed9b..3dbc589cb1b5 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 @@ -249,5 +249,7 @@ public class SingleClassesTest extends SingleClassesTestBase { @Test public void testLambda() { doTest("pkg/TestLambda"); } @Test public void testCustomSyntheticRecords() { doTest("pkg/TestCustomSyntheticRecords"); } @Test public void testFinally() { doTest("pkg/TestFinally"); } + @Test public void testEnumInit() { doTest("pkg/TestEnumInit"); } + @Test public void testGenericInit() { doTest("pkg/TestInitGeneric"); } } diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit$TestEnum.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit$TestEnum.class new file mode 100644 index 0000000000000000000000000000000000000000..fda66fb0d8bb26a5e7f2078d717558431a4cd658 GIT binary patch literal 1189 zcmaJ>?@!ZE6g_Wi*R2*A6Zs7)qHG`x5ER`)K!Oo7!DP6E_^FIKilsAM$7lZ}9f=T) zhR^;{#`7Lq94cGV-gj@$J@>~u+0S2Je*joR-atfP@WcB`cE_oO8-D$0(|5y(mXm;h zWlqT)&cQuOJB&|EPsA+!Bc8U2bSaps$^(nYo!M#i5&=b~KJe9F{!Z zvv41ia&Xl~O<*jY=`=cvw2<0*b)Qpr7hK=jsvqq+!H&J>F_QgH^-PC#3Zx3vvh9`Z zz?BS58qK$l$d>wd2?EJiPIyq=e{BcEgigT5weY~DNfh0RZ-@1OsnK+%#EZ|Dz2;tK z+PLKQ@*TQb$qAUnYCR}B&s{lIPfK}HhO_b>$-PBszNpqh15eo1-wG74Hhtd-)NMNK zF5co;o#XcVDRgahP-+;Ur9PFVGJ)if)Fcr)<7rG1pP@HSD}QDKU0=|1j?^c50#kg) z)VBojLzqTH;TLIThM5vmXXrbJkod?Y`~ya;3lwHBOE1euXWB;zrM3`NWb?F9eln(} zM@}*Fna8V`49v+X6jLI?ad_r4uTmD0rqmrv%8|0r_y+o8-ywFR4MdB(S_4LLS8wnN zWWSf^i{l{{n#nJl$+O>>o4Or6#hnvGl{2m>$575)T{-3%CQi^LJHOyGIRUrBW)ft& aXm1fqj79JWkCk12p7->6{BpSjNsQhjY(!p7U~_{rT(5cL1w+?uSPp{_brpvu!rrb-Q(3vMqPE=VXHr zP&Ihr6A-HciSqxkIR*zb1SNQly&(;n^or~aYZyU9z(2dYTHaZ&2u!^m#212&D}F>Y zjA2~BTdg;2Q(!EaDjyjqMy77qwanK3ky&+fA;d7@$E1chu2QK#03M2Jo*4C(x%Eb1 zIoX$8tQ*Z{uJ54YI+k6_^;cj5$v>sx8m0w&d5e~`A`tDT>SmTwyFBX+4Kuh&O&fN} zc4>K~0K6dz+-8zH0p|6GrRg3v4qh1!VO-Op z)>Ze=A|ot;V8yE0hTC!|T}{%+q?&xS-rcE^6gX4z*3+RnYg5xu5Iwg|+E4R0IUXlE7g0|JXExH63jdyv$y^4qbXH>~-qsLRcUe%`au&tmXuUc3bgzHrjtFj0sy_fOigKQq#fr7{ zR$w;P5WP|~%jI;#Le6t-=OEpffe9r4kd9%D2n6PBYSMy0ZzEMLG84~ptv7Xy;TDND zos8pA^D-J#4R`1(8KV6dbHxSX%_uTW1m!ifX}Cx6QyO#)3HnMg)0B=Brn#%K#InFh zEZ(xOR6!l8td#btrCnLuu{JBmdzQOx?iFbz*+f^o)nN%3*;2tQ=1tdTiW-mNn8!qC z{9BPg_@(6?miAwnE@3>&CFzQHXp<2(y=2>R_JL!16_+S_V@=yaS8l#gtR09y7S9Vz zHYDT2n{TCiAuSNfl`3w*TC=(G?)v5DNton&L@73DIyOpWFNh7&{r3zA=o!bcTzQ); z)?MdFEhg!R`e@kH#Q`28fGkajv@{#EWAIG@!V#VhM$-NarYUZgyfL!;gig`%1>Ki0 zK9VQ!fPMpVFGBbT=HQd~8L}J^GQ{`=dM_au@4JG3NGp03g-3WyUYcH&!agvRE++hv z>@``H!Q&Hy=NKFx`i#*}Q<;; zTI09&JSFSHVmQRNnY3~334-&}7x)gb<3EKzx1*dQnA=fL>Cm{atBug;KW(`dyjxQ+ z_l;tWsNZkgKF8fN_@zItD8_{JgVMjRs>Y=BLl;P%p@Yk;k{eRRAc-BK@`jP5ZY!wj ZUBNTL`LK#LY1fe<%VR09j^~U0zX4c(6T$!h literal 0 HcmV?d00001 diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestEnumInit.class new file mode 100644 index 0000000000000000000000000000000000000000..e8a5d9509b1cdb3ae1e4b09165a26882eaf036b6 GIT binary patch literal 592 zcmaJ;%T5A85UgQ=;iU*D0zQa|2hhX~UNHtkG$BDeK)84saIy|AgV|mDFHa^O`~W}7 z*n^@3ADe8~R##VVCH?yL`~u(%_OMnm^^j@^@faIUB07Kseu=Hx~)q}xi%&U8GGUQY~M>SWuKp>X@cQ-*&w!@;fc zjkdg~PMgL;X@-2|y8WG{8+b}P^=hAV;W^~Z{US3Yx|69llo!hUIb}06x zGy#2%JVR+Y!v5TK%u)DHuW^(ZihueUQZ22e*K~#NONt!-+Pv^xV~EZB*aN3?m?s2g z4nj3f%qC=nk%K3&$C;dfN+Ia9IHrE$CwZ4HFH0Ve8EUZMTUkfWT}Rb e!#ZJ%_y#sn#1^sAjB#u?3e@A+AuJN^HVW@;<9<&7 literal 0 HcmV?d00001 diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$A.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$A.class new file mode 100644 index 0000000000000000000000000000000000000000..0f8b43d9d110040fc4d4fab36b55b4d2e982a1e3 GIT binary patch literal 725 zcmZuu$xZ@65Pby$qlkitxNixE!2@^}LPAJfA})y&?hSNc6lcgxW8%$E(vyh?KfsSN zRu34r=|ff5t9q}htKUCf-vBhQn?ek66Gj>dBnjCYaW5)E;r1(+og3Lzgk;Te9aSg9 zty0^>3}Jb6+ppL%P^X+Ymag=jZm~gFwOSFGYN<^ynqE&5GA+lI7vsB*^li}@GLma~ zT`_D6-_h|DG}OQe2rE%?#YUB9(gno>9wn-T3kttwA4Xr&dr^d%ZCC5%M(CKFJ(p_W z^{#|3?xd1Fk76i(E+KD~T7NghgxPDS?+P{c`9TS*#A*bqW*`2qt^bDzscUcScjb|z z7n1+8*s|_Nn7QBqPP{;w*di=N?3s{0b@?xvLlFd$XD0q$nEb!`Xq&(+`xM{KKoeyD z1@z279CK`w3k^npj-w@=W#Xew=dnEPQRhg@#psFc t&jz`$!9*m+BD%r1tVXnKL36PJV|rV~T8OM;BlMftW}o67CN{AHd;;Lqn5F;# literal 0 HcmV?d00001 diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$B.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$B.class new file mode 100644 index 0000000000000000000000000000000000000000..0a0a277f14e66397e8d70e81fe27ff36b8d4e4a2 GIT binary patch literal 870 zcmb7CO>fgc5Pg%_aT@{+ZJMT~&<}D*I5dc3Vp(z`0Treo#mar-t`e8jF7^hA8$St7 zm3rt8=#N6ox3kZW z$v_cGb{K`qArxEfk%bk)=Eavu$Cs%(X5gKSWD*9=KB3X_a*$qoL@);NsU)mx)%pxHWEpw{YB7F(=a7$<;gYsJ?=>-G+%Qoc`2MwUzYuT@mKmFk6`U83G(P<-5^*k-Ot=+8@o@>YR@-}cLrhp5hLcFBdBO)WTWywMs~K+y zJ4=+oR3tV%CBL5~<*(>wz11O7|uP#Bq zGWZd%B@P31RI*hQO+3aEwtBaQD&tRiU&-<`w$9#$Mw$3S!!>L!YB=m^xdQ#>Y+ZA)#TpH4|5J1KKQwn>EYzQ2H>>g-FEYD_1GZ(ZX<-kCz#m_E BtTg}t literal 0 HcmV?d00001 diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$C.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestInitGeneric$C.class new file mode 100644 index 0000000000000000000000000000000000000000..71eac34cc75e314da429be166e3ecbc65a1f2141 GIT binary patch literal 1273 zcmZ`(+iuf95Iq~GbuOk2X_^)Sw3O23)&>d`h@(iAB_OIPh(vjJ!YXxfoM1ahedCjW z2M|0Up7|)mtZkZ0gC*}}=FFKhyJP?U^W!IgBUBTJK#~zvuz*E|)S2HHN4*c*_}Vo=UohGDZbj1gb&`0@OW11*+~N8mPG_U zy7qO{5J)T-P7Q-Ldc10o;V!@eAJ zWuQ$y0j=nV4h7cQb86KD)@L=pM$fv^JVD)cYYnQbJE?t&o$L0?JvvdKeXmyOl9z$U zLkn|gk`ZqtP;@F&;{PVFbhe{CUq<7A7fLx59w^|{-Oq3LHr_%4xz2DL^wk$_3@N_y z?#whRuyDx+zA58eXk&-w%<<-^Wn=Fh>fFZuJ5*C3f8p~_wFWW_6-^K=j&qJC_F?lC zm@f(54r#`0{5(i=PJOzE_!HAPMneFM^P>44cvBs`U9}UWkFd=?3Ca08(Q_2LJnQg)#ripc<#Rja&Y7-x0q=YTb8CKlJ XF3LDyR*Ewlhs1a3%Mr0M=VRa>AFHBw literal 0 HcmV?d00001 diff --git a/plugins/java-decompiler/engine/testData/results/TestEnumInit.dec b/plugins/java-decompiler/engine/testData/results/TestEnumInit.dec new file mode 100644 index 000000000000..773a92c62804 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/results/TestEnumInit.dec @@ -0,0 +1,74 @@ +package pkg; + +public class TestEnumInit { + public static void main(String[] args) { + }// 7 + + static enum TestEnum { + A, + B, + C; + } + + static enum TestEnum1 { + A(0), + B(1), + C(2); + + private final int anInt; + + private TestEnum1(int i) { + this.anInt = i;// 22 + }// 23 + } + + static enum TestEnum2 { + A(0, "0"), + B(1, "1"), + C(2, "2"); + + private final int anInt; + + private TestEnum2(int i, String s) { + this.anInt = i;// 35 + }// 36 + } +} + +class 'pkg/TestEnumInit' { + method 'main ([Ljava/lang/String;)V' { + 0 4 + } +} + +class 'pkg/TestEnumInit$TestEnum1' { + method ' (Ljava/lang/String;II)V' { + 6 20 + 7 20 + 8 20 + 9 20 + a 20 + b 21 + } +} + +class 'pkg/TestEnumInit$TestEnum2' { + method ' (Ljava/lang/String;IILjava/lang/String;)V' { + 6 32 + 7 32 + 8 32 + 9 32 + a 32 + b 33 + } +} + +Lines mapping: +7 <-> 5 +22 <-> 21 +23 <-> 22 +35 <-> 33 +36 <-> 34 +Not mapped: +21 +34 diff --git a/plugins/java-decompiler/engine/testData/results/TestInitGeneric.dec b/plugins/java-decompiler/engine/testData/results/TestInitGeneric.dec new file mode 100644 index 000000000000..e03ee4277b63 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/results/TestInitGeneric.dec @@ -0,0 +1,111 @@ +package pkg; + +import java.util.List; + +public class TestInitGeneric { + public static void main(String[] args) { + }// 10 + + public T test() { + return (T)null;// 13 + } + + class A { + public T test() { + return (T)null;// 18 + } + } + + class B { + public L test() { + return (L)null;// 24 + } + + public AA test2() { + return (AA)null;// 28 + } + } + + static class C { + public K test(List list) { + return (K)null;// 34 + } + + public L test2(List list) { + L l = (L)(list.get(0));// 38 + System.out.println(l);// 39 + return l;// 40 + } + } +} + +class 'pkg/TestInitGeneric' { + method 'main ([Ljava/lang/String;)V' { + 0 6 + } + + method 'test ()Ljava/lang/Object;' { + 0 9 + 1 9 + } +} + +class 'pkg/TestInitGeneric$A' { + method 'test ()Ljava/lang/Object;' { + 0 14 + 1 14 + } +} + +class 'pkg/TestInitGeneric$B' { + method 'test ()Ljava/lang/Object;' { + 0 20 + 1 20 + } + + method 'test2 ()Ljava/lang/CharSequence;' { + 0 24 + 1 24 + } +} + +class 'pkg/TestInitGeneric$C' { + method 'test (Ljava/util/List;)Ljava/lang/Object;' { + 0 30 + 1 30 + } + + method 'test2 (Ljava/util/List;)Ljava/lang/CharSequence;' { + 0 34 + 1 34 + 2 34 + 3 34 + 4 34 + 5 34 + 6 34 + 7 34 + 8 34 + 9 34 + a 34 + b 35 + c 35 + d 35 + e 35 + f 35 + 10 35 + 11 35 + 12 36 + 13 36 + } +} + +Lines mapping: +10 <-> 7 +13 <-> 10 +18 <-> 15 +24 <-> 21 +28 <-> 25 +34 <-> 31 +38 <-> 35 +39 <-> 36 +40 <-> 37 diff --git a/plugins/java-decompiler/engine/testData/src/pkg/TestEnumInit.java b/plugins/java-decompiler/engine/testData/src/pkg/TestEnumInit.java new file mode 100644 index 000000000000..5a17a064ca34 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/pkg/TestEnumInit.java @@ -0,0 +1,38 @@ +package pkg; + +public class TestEnumInit { + + public static void main(String[] args) { + + } + + enum TestEnum { + A, B, C; + } + + enum TestEnum1 { + + A(0), + B(1), + C(2); + + private final int anInt; + + TestEnum1(int i) { + anInt = i; + } + } + + enum TestEnum2 { + + A(0, "0"), + B(1, "1"), + C(2, "2"); + + private final int anInt; + + TestEnum2(int i, String s) { + anInt = i; + } + } +} \ No newline at end of file diff --git a/plugins/java-decompiler/engine/testData/src/pkg/TestInitGeneric.java b/plugins/java-decompiler/engine/testData/src/pkg/TestInitGeneric.java new file mode 100644 index 000000000000..6296224a9d5b --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/pkg/TestInitGeneric.java @@ -0,0 +1,45 @@ +package pkg; + +import java.util.List; + +public class TestInitGeneric { + + + public static void main(String[] args) { + + } + + public T test() { + return null; + } + + class A { + public T test() { + return null; + } + } + + class B { + public L test() { + return null; + } + + public AA test2() { + return null; + } + } + + static class C { + public K test(List list) { + return null; + } + + public L test2(List list) { + L l = list.get(0); + System.out.println(l); + return l; + } + + + } +} \ No newline at end of file