From 32415714413cd430cb740a60b0a2c68bd6b2bac7 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 17 Jan 2017 20:45:27 +0300 Subject: [PATCH 1/7] cleanup: use streams --- .../org/jetbrains/java/decompiler/main/ClassWriter.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java index d80090d694bc..0986a22a1553 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java @@ -651,15 +651,10 @@ public class ClassWriter { if (attr != null) { descriptor = GenericMain.parseMethodSignature(attr.getSignature()); if (descriptor != null) { - int actualParams = md.params.length; + long actualParams = md.params.length; List sigFields = methodWrapper.signatureFields; if (sigFields != null) { - actualParams = 0; - for (VarVersionPair field : methodWrapper.signatureFields) { - if (field == null) { - actualParams++; - } - } + actualParams = sigFields.stream().filter(Objects::isNull).count(); } else if (isEnum && init) actualParams -= 2; if (actualParams != descriptor.params.size()) { From e07e6c2d6d9212fc059a47aff190455f23cab945 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 17 Jan 2017 20:46:58 +0300 Subject: [PATCH 2/7] test for anonymous class with params --- .../java/decompiler/SingleClassesTest.java | 1 + .../classes/pkg/TestAnonymousParams$1.class | Bin 0 -> 771 bytes .../classes/pkg/TestAnonymousParams.class | Bin 0 -> 749 bytes .../testData/results/TestAnonymousParams.dec | 36 ++++++++++++++++++ .../testData/src/pkg/TestAnonymousParams.java | 32 ++++++++++++++++ 5 files changed, 69 insertions(+) create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestAnonymousParams$1.class create mode 100644 plugins/java-decompiler/engine/testData/classes/pkg/TestAnonymousParams.class create mode 100644 plugins/java-decompiler/engine/testData/results/TestAnonymousParams.dec create mode 100644 plugins/java-decompiler/engine/testData/src/pkg/TestAnonymousParams.java 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 7c1cc3356f11..7a69a8e2c02f 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 @@ -96,6 +96,7 @@ public class SingleClassesTest { @Test public void testAsserts() { doTest("pkg/TestAsserts"); } @Test public void testLocalsNames() { doTest("pkg/TestLocalsNames"); } @Test public void testAnonymousParamNames() { doTest("pkg/TestAnonymousParamNames"); } + @Test public void testAnonymousParams() { doTest("pkg/TestAnonymousParams"); } private void doTest(String testFile, String... companionFiles) { ConsoleDecompiler decompiler = fixture.getDecompiler(); diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestAnonymousParams$1.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestAnonymousParams$1.class new file mode 100644 index 0000000000000000000000000000000000000000..dccd219da7f3606a18053add2e5edc0c9b0e936e GIT binary patch literal 771 zcmZ`%!EVz)5Pj=7F%5>gEu|@;5U7D9AVLwhA|zB5$xP)!PLO&;Jr;{!X*hU$%WdKxpPf9l4f_+2wh zZLZDnTUDIcQGm@5F&>1tf`t$@1R?5p$TiN{V!XxL<%-y@P}zTr5?HycCGY-96j+FN=du|h6^8(5`x+&xCFR_%U;_n8+D{|K8U hVfY7dL3ooGpP4nbX_WYN+$wWT+-3_WoIjhM-)~lVs&fDU literal 0 HcmV?d00001 diff --git a/plugins/java-decompiler/engine/testData/classes/pkg/TestAnonymousParams.class b/plugins/java-decompiler/engine/testData/classes/pkg/TestAnonymousParams.class new file mode 100644 index 0000000000000000000000000000000000000000..0946b63019f38000bada2e6df2089716088d128d GIT binary patch literal 749 zcmZ`%T~8B16g{(Dy1HGV3j(d6e27wNbffVNV`7LVn>1ho!T2~W0}gIyn%%9@pXG}r zn)n0!QO2`dU5V03X71dtbMLt`KYo7w4&W)aeblkyVbzC&+dl4K&BMBf4S^swMx}d+ z%rcb;)Sqdi^XCG!&d#xbyJt_7z+6uowLc#AReB`*2`%$IJCMn-Om(6EHoEycO^kML z^!_Y5Qd$1OSo3LU$JuL{%3-!k*i&m6(dnJb4>Hm=ip^-8ALgl&!`-+j>1ZRcc%@%J zNbXo5Jk?3A(o4w#D^<>`f1NDszx+5*qg-2)dDx_WXvgV5F_dgtS2X*m=rF)FTxY*i z2yHzs0`7X)3UCki1(v4-3N%Z?i8N=?LH}G0a)E_v1_xDh0#7 13 +27 <-> 11 +30 <-> 14 +31 <-> 15 diff --git a/plugins/java-decompiler/engine/testData/src/pkg/TestAnonymousParams.java b/plugins/java-decompiler/engine/testData/src/pkg/TestAnonymousParams.java new file mode 100644 index 000000000000..55e58bf42613 --- /dev/null +++ b/plugins/java-decompiler/engine/testData/src/pkg/TestAnonymousParams.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class TestAnonymousParams { + void foo(InputStream in, int a) throws IOException { + FilterInputStream filterInputStream = new FilterInputStream(in) { + @Override + public int read() throws IOException { + return a; + } + }; + filterInputStream.read(); + } +} From 6370808f19e0bb0841d38cbf2bfec767eff9b7df Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 17 Jan 2017 21:38:48 +0300 Subject: [PATCH 3/7] fixed IdeaDecompilerTest.testStubCompatibility --- .../java/decompiler/main/rels/NestedClassProcessor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/NestedClassProcessor.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/NestedClassProcessor.java index b456cc849785..897b3944951d 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/NestedClassProcessor.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/NestedClassProcessor.java @@ -405,8 +405,10 @@ public class NestedClassProcessor { MethodWrapper method = nestedNode.getWrapper().getMethodWrapper(CodeConstants.INIT_NAME, entry.getKey()); method.signatureFields = new ArrayList<>(); + boolean firstSignField = nestedNode.type != ClassNode.CLASS_ANONYMOUS; for (VarFieldPair pair : entry.getValue()) { - method.signatureFields.add(pair == null || pair.fieldKey.isEmpty() ? null : pair.varPair); + method.signatureFields.add(pair == null || (!firstSignField && pair.fieldKey.isEmpty()) ? null : pair.varPair); + firstSignField = false; } } } From 900760da9c18f58728c65fe7006e66d81034f72a Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 17 Jan 2017 21:54:55 +0300 Subject: [PATCH 4/7] [groovy] check if contents are loaded before accessing stub (IDEA-166343) --- .../jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java index 10447f32f876..80d86330a91b 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -544,6 +544,7 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile, Ps @Override public boolean shouldChangeModificationCount(PsiElement place) { + if (!isContentsLoaded()) return true; // 1. We actually should never get GrTypeDefinition as a parent, because it is a PsiClass, // and PsiClasses prevent to go up in a tree any further // 2. If place is under a variable then @BaseScript or @Field may be changed, From 80764260d27c8ad682136970fb65c71628991d90 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 17 Jan 2017 20:38:08 +0100 Subject: [PATCH 5/7] Enable Python CE plugin for WebStorm --- python/pluginResources/META-INF/plugin.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/python/pluginResources/META-INF/plugin.xml b/python/pluginResources/META-INF/plugin.xml index af5cd342fc5c..36953b3ee410 100644 --- a/python/pluginResources/META-INF/plugin.xml +++ b/python/pluginResources/META-INF/plugin.xml @@ -24,6 +24,7 @@ The Python plug-in provides smart editing for Python scripts. The feature set of com.intellij.modules.java com.intellij.modules.clion + com.intellij.modules.webstorm com.intellij.modules.rider