From 3f19ad8a357ef79c65f980857b9f06d8f6cca7f7 Mon Sep 17 00:00:00 2001 From: Andrey Starovoyt Date: Wed, 2 Jul 2014 20:36:45 +0400 Subject: [PATCH 1/5] extract common method to ModuleUtil --- .../intellij/openapi/module/ModuleUtil.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java b/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java index a7f7f326cdaf..bf56114a2467 100644 --- a/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -19,9 +19,14 @@ */ package com.intellij.openapi.module; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ContentEntry; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Key; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.ParameterizedCachedValue; @@ -103,4 +108,33 @@ public class ModuleUtil extends ModuleUtilCore { String type = module.getOptionValue(Module.ELEMENT_TYPE); return ModuleTypeManager.getInstance().findByID(type); } + + public static void updateExcludedFoldersInWriteAction(final Module module, + @NotNull final VirtualFile contentRoot, + final Collection urlsToUnExclude, + final Collection urlsToExclude) { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + public void run() { + final ModifiableRootModel modifiableModel = ModuleRootManager.getInstance(module).getModifiableModel(); + try { + for (final ContentEntry contentEntry : modifiableModel.getContentEntries()) { + if (contentRoot.equals(contentEntry.getFile())) { + for (String url : urlsToUnExclude) { + contentEntry.removeExcludeFolder(url); + } + for (String url : urlsToExclude) { + contentEntry.addExcludeFolder(url); + } + break; + } + } + modifiableModel.commit(); + } + catch (Exception e) { + modifiableModel.dispose(); + throw new RuntimeException(e.getMessage(), e); + } + } + }); + } } From 940ac51b75fbde9acf3e7173d32ba14446337397 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 2 Jul 2014 19:35:33 +0400 Subject: [PATCH 2/5] cleanup --- .../ui/breakpoints/MethodBreakpoint.java | 17 ++++++++--------- .../breakpoints/WildcardMethodBreakpoint.java | 16 ++-------------- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java index 8731329275e9..23b18cb4f306 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java @@ -31,6 +31,7 @@ import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.engine.requests.RequestManagerImpl; import com.intellij.debugger.impl.DebuggerUtilsEx; import com.intellij.debugger.impl.PositionUtil; +import com.intellij.debugger.requests.Requestor; import com.intellij.icons.AllIcons; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -146,7 +147,7 @@ public class MethodBreakpoint extends BreakpointWithHighlighter T findRequest(@NotNull DebugProcessImpl debugProcess, Class requestClass, Requestor requestor) { + Set requests = debugProcess.getRequestsManager().findRequests(requestor); + for (EventRequest eventRequest : requests) { + if (eventRequest.getClass().equals(requestClass)) { + return (T)eventRequest; } } - return null; } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java index 295fddbaf187..c106f65cab81 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java @@ -135,7 +135,7 @@ public class WildcardMethodBreakpoint extends Breakpoint Date: Wed, 2 Jul 2014 20:17:59 +0400 Subject: [PATCH 3/5] fire breakpointChanged event on condition and log enabled state changed to recreate breakpoint requests --- .../impl/breakpoints/XBreakpointBase.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java index 9723c9ca68d6..6184ad9857b3 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java @@ -167,7 +167,10 @@ public class XBreakpointBase, P extends XBreakpointP } public void setConditionEnabled(boolean conditionEnabled) { - myConditionEnabled = conditionEnabled; + if (myConditionEnabled != conditionEnabled) { + myConditionEnabled = conditionEnabled; + fireBreakpointChanged(); + } } public boolean isLogExpressionEnabled() { @@ -175,7 +178,10 @@ public class XBreakpointBase, P extends XBreakpointP } public void setLogExpressionEnabled(boolean logExpressionEnabled) { - myLogExpressionEnabled = logExpressionEnabled; + if (myLogExpressionEnabled != logExpressionEnabled) { + myLogExpressionEnabled = logExpressionEnabled; + fireBreakpointChanged(); + } } @Override @@ -204,7 +210,7 @@ public class XBreakpointBase, P extends XBreakpointP @Override public void setLogExpressionObject(@Nullable XExpression expression) { - if (!Comparing.equal(getLogExpressionObject(), expression)) { + if (!Comparing.equal(myLogExpression, expression)) { myLogExpression = expression; fireBreakpointChanged(); } @@ -236,7 +242,7 @@ public class XBreakpointBase, P extends XBreakpointP @Override public void setConditionExpression(@Nullable XExpression condition) { - if (!Comparing.equal(condition, getConditionExpression())) { + if (!Comparing.equal(condition, myCondition)) { myCondition = condition; fireBreakpointChanged(); } From 43044df5b73c056487dd2a58aa76e30f70b8c4be Mon Sep 17 00:00:00 2001 From: Valentin Fondaratov Date: Wed, 2 Jul 2014 21:15:17 +0400 Subject: [PATCH 4/5] make ConsoleExecuteActionHandler public --- .../com/intellij/execution/console/ConsoleExecuteAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java index 495a13614005..fcec06644765 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java @@ -133,7 +133,7 @@ public class ConsoleExecuteAction extends DumbAwareAction { myExecuteActionHandler.addToCommandHistoryAndExecute(myConsole, myConsoleView, text); } - static abstract class ConsoleExecuteActionHandler { + public static abstract class ConsoleExecuteActionHandler { private final ConsoleHistoryModel myCommandHistoryModel; private boolean myAddToHistory = true; From f715cf9ca848bd09f14d74aea3c44d06b1a5c72c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 2 Jul 2014 18:25:51 +0200 Subject: [PATCH 5/5] java 1.4 descriptor introduced; ignore removeAll without generics EA-57871 - assert: PsiElementFactoryImpl.createType --- .../SuspiciousMethodCallUtil.java | 12 ++--- .../suspiciousCalls/RemoveAll14.java | 14 ++++++ ...SuspiciousCollectionMethodCalls14Test.java | 44 +++++++++++++++++++ .../LightCodeInsightFixtureTestCase.java | 12 +++++ 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java create mode 100644 java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java index ecf21db51d47..d725158a5201 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java @@ -18,11 +18,9 @@ package com.intellij.codeInspection.miscGenerics; import com.intellij.codeInsight.daemon.impl.analysis.JavaGenericsUtil; import com.intellij.codeInspection.InspectionsBundle; import com.intellij.psi.*; -import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.*; import com.intellij.util.containers.IntArrayList; -import com.sun.corba.se.impl.corba.TCUtility; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,10 +45,12 @@ public class SuspiciousMethodCallUtil { PsiMethod contains = MethodSignatureUtil.findMethodBySignature(collectionClass, containsSignature, false); addMethod(contains, 0, patternMethods, indices); - PsiClassType wildcardCollection = javaPsiFacade.getElementFactory().createType(collectionClass, PsiWildcardType.createUnbounded(manager)); - MethodSignature removeAllSignature = MethodSignatureUtil.createMethodSignature("removeAll", new PsiType[] {wildcardCollection}, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY); - PsiMethod removeAll = MethodSignatureUtil.findMethodBySignature(collectionClass, removeAllSignature, false); - addMethod(removeAll, 0, patternMethods, indices); + if (PsiUtil.isLanguageLevel5OrHigher(collectionClass)) { + PsiClassType wildcardCollection = javaPsiFacade.getElementFactory().createType(collectionClass, PsiWildcardType.createUnbounded(manager)); + MethodSignature removeAllSignature = MethodSignatureUtil.createMethodSignature("removeAll", new PsiType[] {wildcardCollection}, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY); + PsiMethod removeAll = MethodSignatureUtil.findMethodBySignature(collectionClass, removeAllSignature, false); + addMethod(removeAll, 0, patternMethods, indices); + } } final PsiClass listClass = javaPsiFacade.findClass(CommonClassNames.JAVA_UTIL_LIST, searchScope); diff --git a/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java b/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java new file mode 100644 index 000000000000..f6e2c033b6fc --- /dev/null +++ b/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java @@ -0,0 +1,14 @@ +import java.util.*; + + +class Simple { + public static void main(Set set, Set setO) { + class O {} + + Map someData = new HashMap(); + + set.removeAll(someData.keySet()); + setO.removeAll(someData.keySet()); + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java new file mode 100644 index 000000000000..2d30216395ac --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2014 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 com.intellij.codeInspection; + +import com.intellij.JavaTestUtil; +import com.intellij.codeInspection.miscGenerics.SuspiciousCollectionsMethodCallsInspection; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +import org.jetbrains.annotations.NotNull; + +public class SuspiciousCollectionMethodCalls14Test extends LightCodeInsightFixtureTestCase { + private final SuspiciousCollectionsMethodCallsInspection myTool = new SuspiciousCollectionsMethodCallsInspection(); + + @Override + protected String getBasePath() { + return JavaTestUtil.getRelativeJavaTestDataPath() + "/inspection/suspiciousCalls"; + } + + private void doTest() throws Exception { + myFixture.enableInspections(myTool); + myFixture.testHighlighting(getTestName(false) + ".java"); + } + + public void testRemoveAll14() throws Exception { doTest(); } + + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_1_4; + } +} diff --git a/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java b/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java index 5d986128ee66..3699fe36aff5 100644 --- a/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java @@ -36,6 +36,18 @@ import java.io.File; * @author peter */ public abstract class LightCodeInsightFixtureTestCase extends UsefulTestCase{ + public static final LightProjectDescriptor JAVA_1_4 = new DefaultLightProjectDescriptor() { + @Override + public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) { + model.getModuleExtension(LanguageLevelModuleExtension.class).setLanguageLevel(LanguageLevel.JDK_1_6); + } + }; + public static final LightProjectDescriptor JAVA_1_5 = new DefaultLightProjectDescriptor() { + @Override + public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) { + model.getModuleExtension(LanguageLevelModuleExtension.class).setLanguageLevel(LanguageLevel.JDK_1_6); + } + }; public static final LightProjectDescriptor JAVA_1_6 = new DefaultLightProjectDescriptor() { @Override public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) {