From 0e514a62539310acfe380cbb71791656247cf23b Mon Sep 17 00:00:00 2001 From: Alexandru-Constantin Bledea Date: Sat, 19 Mar 2016 20:44:29 +0200 Subject: [PATCH] fix constructor arguments for extended inner classes --- .../decompiler/exps/InvocationExprent.java | 2 +- .../java/decompiler/SingleClassesTest.java | 3 +- .../pkg/TestExtendingSubclass$Subclass1.class | Bin 0 -> 555 bytes .../pkg/TestExtendingSubclass$Subclass2.class | Bin 0 -> 594 bytes .../classes/pkg/TestExtendingSubclass.class | Bin 0 -> 441 bytes testData/results/TestExtendingSubclass.dec | 35 ++++++++++++++++++ testData/src/pkg/TestExtendingSubclass.java | 18 +++++++++ 7 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 testData/classes/pkg/TestExtendingSubclass$Subclass1.class create mode 100644 testData/classes/pkg/TestExtendingSubclass$Subclass2.class create mode 100644 testData/classes/pkg/TestExtendingSubclass.class create mode 100644 testData/results/TestExtendingSubclass.dec create mode 100644 testData/src/pkg/TestExtendingSubclass.java diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java index 3ceb99c..758b93f 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java @@ -334,7 +334,7 @@ public class InvocationExprent extends Exprent { boolean firstParameter = true; int start = isEnum ? 2 : 0; for (int i = start; i < lstParameters.size(); i++) { - if (sigFields == null) { + if (sigFields == null || null == sigFields.get(i)) { if (!firstParameter) { buf.append(", "); } diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java index e905fb3..260445d 100644 --- a/test/org/jetbrains/java/decompiler/SingleClassesTest.java +++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java @@ -84,6 +84,7 @@ public class SingleClassesTest { @Test public void testMethodReferenceLetterClass() { doTest("pkg/TestMethodReferenceLetterClass"); } @Test public void testMemberAnnotations() { doTest("pkg/TestMemberAnnotations"); } @Test public void testStaticNameClash() { doTest("pkg/TestStaticNameClash"); } + @Test public void testExtendingSubclass() { doTest("pkg/TestExtendingSubclass"); } protected void doTest(String testFile, String... companionFiles) { ConsoleDecompiler decompiler = fixture.getDecompiler(); @@ -130,4 +131,4 @@ public class SingleClassesTest { return files; } -} \ No newline at end of file +} diff --git a/testData/classes/pkg/TestExtendingSubclass$Subclass1.class b/testData/classes/pkg/TestExtendingSubclass$Subclass1.class new file mode 100644 index 0000000000000000000000000000000000000000..fbf2ce2b4220de642b95b58ed3cbb2148db60da8 GIT binary patch literal 555 zcmaJ;O-sW-5Ph4*#>8l2{cL*?tWYbM3f?MSih>aI(9-)RU21B&l_VAamIo0$_yhb= z;!II{(8{vR%-c8f-tNACyuJZAMa@P5n+{BDS=h0#D^SdDM~{@)jw~2%xx}~P;_CTVxcOqzwnLb$^zb8@FpCoC>JO+_$4X}+p$MKW6~!H&tpl> zXj@pOXj2xzAO_$xkDei#FEE~{GT<;q5yZ4 Mo1tV7+gJrY0UM2l+yDRo literal 0 HcmV?d00001 diff --git a/testData/classes/pkg/TestExtendingSubclass$Subclass2.class b/testData/classes/pkg/TestExtendingSubclass$Subclass2.class new file mode 100644 index 0000000000000000000000000000000000000000..d30cc61f527200abd5220e809d3632d540ce773b GIT binary patch literal 594 zcma)3T}uK%6g{(UZrb{heX1`(2Bnb}y&1hoL9q0Y;`^wBZLMSMuF>D>A%Y(I0sW}x zjPwO%#4>x&oqNx@XJ%erpPm66qMSkk%W2qHaj@oKT_71>`cb7JQ1))FhxLw%;*+~r z>4C3@?Mbg6$S7*E?a0@Dd@Rt|{-e*klDD!RNIk5#OhCZ3TC literal 0 HcmV?d00001 diff --git a/testData/classes/pkg/TestExtendingSubclass.class b/testData/classes/pkg/TestExtendingSubclass.class new file mode 100644 index 0000000000000000000000000000000000000000..eb4f049285b0ef4ac6e9ef8c9d06eb0b0bc291bd GIT binary patch literal 441 zcma)2O-sW-5Pj38T^pmV@eB1NdQcCBiZ{heQ4oS2T6*84OWYbal1;?F@d@A@+b){$1=a;N1U3nsVHw4#wDyeP-5R6vLB*66*!orN z6WW*B=;DgdJUSi|oIy5Ggl?#fx+|X|m5*eUvf_tXEYq>fb;W0*Q#@!(*bAQ@lVGH5 zas65-GtnlQ|9?Snhgq4&>PA;>cK>vpPUVaA(1A (Lpkg/TestExtendingSubclass;Ljava/lang/String;)V' { + 8 5 + b 6 + } +} + +class 'pkg/TestExtendingSubclass$Subclass1' { + method ' (Lpkg/TestExtendingSubclass;Ljava/lang/String;)V' { + 9 11 + } +} + +Lines mapping: +9 <-> 12 +14 <-> 6 +15 <-> 7 +Not mapped: +8 +13 diff --git a/testData/src/pkg/TestExtendingSubclass.java b/testData/src/pkg/TestExtendingSubclass.java new file mode 100644 index 0000000..f63baed --- /dev/null +++ b/testData/src/pkg/TestExtendingSubclass.java @@ -0,0 +1,18 @@ +package pkg; + +import java.math.BigDecimal; + +public class TestExtendingSubclass { + + class Subclass1 { + Subclass1(String name) { + } + } + + class Subclass2 extends Subclass1 { + Subclass2(String name) { + super(name); + } + } + +}