From 3c68a65b3d026c5c3791ed7d22ed1a2c52009392 Mon Sep 17 00:00:00 2001 From: fitermay Date: Thu, 14 Apr 2016 18:46:42 -0400 Subject: [PATCH 01/14] --fix NPE in PythonSdkDetailsDialog.java --- .../python/configuration/PythonSdkDetailsDialog.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/python/python-community-configure/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java b/python/python-community-configure/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java index 2ae638fc9233..326671eb84f3 100644 --- a/python/python-community-configure/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java +++ b/python/python-community-configure/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java @@ -226,6 +226,7 @@ public class PythonSdkDetailsDialog extends DialogWrapper { mySdkSettingsWereModified.run(); } for (SdkModificator modificator : myModifiedModificators) { + /* This should always be true barring bug elsewhere, log error on else? */ if (modificator.isWritable()) { modificator.commitChanges(); } @@ -433,8 +434,13 @@ public class PythonSdkDetailsDialog extends DialogWrapper { } private void reloadSdk(@NotNull Sdk currentSdk) { - // XXX: Here we are reusing a modifier that we are going to commit later - PythonSdkUpdater.update(currentSdk, myModificators.get(currentSdk), myProject, null); + /* PythonSdkUpdater.update invalidates the modificator so we need to create a new + one for further changes + */ + if (PythonSdkUpdater.update(currentSdk, myModificators.get(currentSdk), myProject, null)){ + myModifiedModificators.remove(myModificators.get(currentSdk)); + myModificators.put(currentSdk, currentSdk.getSdkModificator()); + } } private class ToggleVirtualEnvFilterButton extends ToggleActionButton implements DumbAware { From 86b9e026d7433dbad4459228b81f44a443bf7be1 Mon Sep 17 00:00:00 2001 From: fitermay Date: Thu, 14 Apr 2016 19:52:06 -0400 Subject: [PATCH 02/14] --fix framework listener locking up UI thread --- .../python/testing/VFSTestFrameworkListener.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/src/com/jetbrains/python/testing/VFSTestFrameworkListener.java b/python/src/com/jetbrains/python/testing/VFSTestFrameworkListener.java index 60f0b9807df0..6dd8eb7b839a 100644 --- a/python/src/com/jetbrains/python/testing/VFSTestFrameworkListener.java +++ b/python/src/com/jetbrains/python/testing/VFSTestFrameworkListener.java @@ -28,7 +28,9 @@ import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.newvfs.BulkFileListener; import com.intellij.openapi.vfs.newvfs.events.VFileContentChangeEvent; import com.intellij.openapi.vfs.newvfs.events.VFileEvent; +import com.intellij.util.Alarm; import com.intellij.util.messages.MessageBus; +import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; import com.jetbrains.python.PyNames; @@ -44,7 +46,7 @@ import java.util.List; */ public class VFSTestFrameworkListener { private static final Logger LOG = Logger.getInstance("#com.jetbrains.python.testing.VFSTestFrameworkListener"); - private final MergingUpdateQueue myQueue = new MergingUpdateQueue("TestFrameworkChecker", 5000, true, null); + private final MergingUpdateQueue myQueue; private final PyTestFrameworkService myService; public VFSTestFrameworkListener() { @@ -86,6 +88,7 @@ public class VFSTestFrameworkListener { } } }); + myQueue = new MergingUpdateQueue("TestFrameworkChecker", 5000, true, null, ApplicationManager.getApplication(), null, Alarm.ThreadToUse.POOLED_THREAD); } public void updateAllTestFrameworks(final Sdk sdk) { @@ -100,8 +103,8 @@ public class VFSTestFrameworkListener { @Override public void run() { final Boolean installed = isTestFrameworkInstalled(sdk, testPackageName); - if (installed != null) - testInstalled(installed, sdk.getHomePath(), testPackageName); + if (installed != null) ApplicationManager.getApplication().invokeLater( ( ()-> testInstalled(installed, sdk.getHomePath(), testPackageName))); + } }); } From 50719b8448206d0ae9d492dfe2df6f0c29b0d84f Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 26 Apr 2016 18:50:29 +0300 Subject: [PATCH 03/14] gradle versions list for integration test updated --- .../gradle/tooling/builder/AbstractModelBuilderTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java b/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java index fe6273b26a82..a2918f182521 100644 --- a/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java +++ b/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java @@ -69,7 +69,7 @@ public abstract class AbstractModelBuilderTest { public static final Object[][] SUPPORTED_GRADLE_VERSIONS = { {"1.9"}, /*{"1.10"}, {"1.11"},*/ {"1.12"}, - {"2.0"}, /*{"2.1"}, {"2.2"} , {"2.3"}, {"2.4"}, {"2.5"}, {"2.6"}, {"2.7"}, {"2.8"},*/ {"2.9"}, /*{"2.10"}, {"2.11"},*/ {"2.12"} + {"2.0"}, /*{"2.1"}, {"2.2"} , {"2.3"}, {"2.4"}, {"2.5"}, {"2.6"}, {"2.7"}, {"2.8"},*/ {"2.9"}, /*{"2.10"}, {"2.11"}, {"2.12"},*/ {"2.13"} }; public static final String BASE_GRADLE_VERSION = String.valueOf(SUPPORTED_GRADLE_VERSIONS[SUPPORTED_GRADLE_VERSIONS.length - 1][0]); From 8e37cda74c9ff652594791ac6c99b7e23fadcc1e Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 26 Apr 2016 18:57:47 +0300 Subject: [PATCH 04/14] IDEA-23075 - do not substitute slash-r on value edit --- .../src/com/intellij/ui/EditorTextField.java | 4 +++ .../xdebugger/impl/ui/TextViewer.java | 25 +++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/EditorTextField.java b/platform/platform-impl/src/com/intellij/ui/EditorTextField.java index 2c6747501971..7ffd5f9fbbfa 100644 --- a/platform/platform-impl/src/com/intellij/ui/EditorTextField.java +++ b/platform/platform-impl/src/com/intellij/ui/EditorTextField.java @@ -574,6 +574,10 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener, myIsViewer = !enabled; } + public boolean isViewer() { + return myIsViewer; + } + @Override public Color getBackground() { Color color = getBackgroundColor(isEnabled(), EditorColorsUtil.getGlobalOrDefaultColorScheme()); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java index bd32c766e0d8..84590c7c878c 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java @@ -18,6 +18,7 @@ package com.intellij.xdebugger.impl.ui; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.ex.EditorEx; +import com.intellij.openapi.editor.impl.EditorFactoryImpl; import com.intellij.openapi.fileTypes.FileTypes; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; @@ -31,7 +32,7 @@ public final class TextViewer extends EditorTextField { private final boolean myEmbeddedIntoDialogWrapper; public TextViewer(@NotNull String initialText, @NotNull Project project, boolean viewer) { - this(createDocument(initialText), project, true, viewer); + this(createDocument(initialText, viewer), project, true, viewer); } public TextViewer(@NotNull String initialText, @NotNull Project project) { @@ -45,17 +46,25 @@ public final class TextViewer extends EditorTextField { setFontInheritedFromLAF(false); } - private static Document createDocument(@NotNull String initialText) { - final Document document = EditorFactory.getInstance().createDocument(StringUtil.convertLineSeparators(initialText)); - //if (document instanceof DocumentImpl) { - // ((DocumentImpl)document).setAcceptSlashR(true); - //} - return document; + private static Document createDocument(@NotNull String initialText, boolean viewer) { + if (needSlashRSupport(initialText, viewer)){ + return ((EditorFactoryImpl)EditorFactory.getInstance()).createDocument(initialText, true, false); + } + else { + return EditorFactory.getInstance().createDocument(StringUtil.convertLineSeparators(initialText)); + } } @Override public void setText(@Nullable String text) { - super.setText(text != null ? StringUtil.convertLineSeparators(text) : null); + if (text != null && !needSlashRSupport(text, isViewer())) { + text = StringUtil.convertLineSeparators(text); + } + super.setText(text); + } + + private static boolean needSlashRSupport(String text, boolean viewer) { + return !viewer && text.contains("\r"); } @Override From 09d257b0fa0f6d0acb74c92918d27d313ff83525 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 26 Apr 2016 19:35:25 +0300 Subject: [PATCH 05/14] inspection tool window: NPEs --- .../codeInspection/ui/DefaultInspectionToolPresentation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java index 97b090e80212..4b983b8b52d0 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java @@ -68,7 +68,7 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro private static final Object lock = new Object(); private final Map myProblemElements = Collections.synchronizedMap(new THashMap( TObjectHashingStrategy.IDENTITY)); - private final Map> myContents = Collections.synchronizedMap(new THashMap>(1)); // keys can be null + private final Map> myContents = Collections.synchronizedMap(new HashMap>(1)); // keys can be null private final Set myModulesProblems = Collections.synchronizedSet(new THashSet(TObjectHashingStrategy.IDENTITY)); private final Map myProblemToElements = Collections.synchronizedMap(new THashMap(TObjectHashingStrategy.IDENTITY)); private DescriptorComposer myComposer; From 2683e899830b11000d815490c59f1dfec1865f30 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 26 Apr 2016 19:38:08 +0300 Subject: [PATCH 06/14] IDEA-148715 ClassCastException on creating new project --- .../project/manage/ExternalProjectsDataStorage.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java index 280c201e316a..078118b4b92f 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java @@ -35,10 +35,7 @@ import com.intellij.openapi.module.ModuleTypeId; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.util.Alarm; -import com.intellij.util.Consumer; -import com.intellij.util.Function; -import com.intellij.util.SmartList; +import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import com.intellij.util.xmlb.annotations.AbstractCollection; @@ -394,10 +391,8 @@ public class ExternalProjectsDataStorage implements SettingsSavingComponent, Per projects.add(projectDataDataNode); } } - catch (ClassNotFoundException e) { - IOException ioException = new IOException(); - ioException.initCause(e); - throw ioException; + catch (Exception e) { + throw new IOException(e); } finally { os.close(); From 4564ba2ce536ff1f2362ad0d3df53ecb559143d8 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 26 Apr 2016 15:56:04 +0300 Subject: [PATCH 07/14] JBIterator: employ skip() in flatten() --- .../util/containers/TreeTraverserTest.java | 2 +- .../com/intellij/util/containers/JBIterable.java | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/util/containers/TreeTraverserTest.java b/platform/platform-tests/testSrc/com/intellij/util/containers/TreeTraverserTest.java index f04035c86f8c..bbeaa1d15fdb 100644 --- a/platform/platform-tests/testSrc/com/intellij/util/containers/TreeTraverserTest.java +++ b/platform/platform-tests/testSrc/com/intellij/util/containers/TreeTraverserTest.java @@ -245,7 +245,7 @@ public class TreeTraverserTest extends TestCase { // JBIterable ---------------------------------------------- public void testAppend() { - JBIterable it = JBIterable.of(1, 2, 3).append(JBIterable.of(4, 5, 6)).append(7); + JBIterable it = JBIterable.of(1, 2, 3).append(JBIterable.of(4, 5, 6)).append(JBIterable.empty()).append(7); assertEquals(7, it.size()); assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7), it.toList()); assertTrue(it.contains(5)); diff --git a/platform/util/src/com/intellij/util/containers/JBIterable.java b/platform/util/src/com/intellij/util/containers/JBIterable.java index f154ba558eb6..942cc0073458 100644 --- a/platform/util/src/com/intellij/util/containers/JBIterable.java +++ b/platform/util/src/com/intellij/util/containers/JBIterable.java @@ -20,7 +20,6 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Conditions; import com.intellij.openapi.util.Ref; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import com.intellij.util.Functions; import com.intellij.util.PairFunction; @@ -193,9 +192,7 @@ public abstract class JBIterable implements Iterable { */ @Override public String toString() { - int max = 50; - List list = take(max + 1).toList(); - return "(" + StringUtil.join(list.subList(0, Math.min(list.size(), max)), ", ") + (list.size() > max ? ", ..." : "") + ")"; + return myIterable == this ? super.toString() : String.valueOf(myIterable); } /** @@ -365,11 +362,10 @@ public abstract class JBIterable implements Iterable { @Override public T nextImpl() { - while ((cur == null || !cur.hasNext()) && iterator.hasNext()) { - cur = fun.fun(iterator.next()).iterator(); - } - if (cur == null || !cur.hasNext()) return stop(); - return cur.next(); + if (cur != null && cur.hasNext()) return cur.next(); + if (!iterator.hasNext()) return stop(); + cur = fun.fun(iterator.next()).iterator(); + return skip(); } @Override From 2c3ab52c8c43e381bc3b586df3a143d279d1a04c Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 26 Apr 2016 19:55:24 +0300 Subject: [PATCH 08/14] gradle: vmOptions adjusted for gradle daemon in tests --- .../plugins/gradle/importing/GradleImportingTestCase.java | 2 +- .../gradle/tooling/builder/AbstractModelBuilderTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java index 737fc8a3d79d..2a4f207481f0 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java @@ -105,7 +105,7 @@ public abstract class GradleImportingTestCase extends ExternalSystemImportingTes } }.execute(); myProjectSettings = new GradleProjectSettings(); - GradleSettings.getInstance(myProject).setGradleVmOptions("-Xmx64m -XX:MaxPermSize=64m"); + GradleSettings.getInstance(myProject).setGradleVmOptions("-Xmx128m -XX:MaxPermSize=64m"); System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, String.valueOf(GRADLE_DAEMON_TTL_MS)); configureWrapper(); } diff --git a/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java b/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java index a2918f182521..051b498a3429 100644 --- a/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java +++ b/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/builder/AbstractModelBuilderTest.java @@ -155,7 +155,7 @@ public abstract class AbstractModelBuilderTest { assertNotNull(initScript); String jdkHome = IdeaTestUtil.requireRealJdkHome(); buildActionExecutor.setJavaHome(new File(jdkHome)); - buildActionExecutor.setJvmArguments("-Xmx64m", "-XX:MaxPermSize=64m"); + buildActionExecutor.setJvmArguments("-Xmx128m", "-XX:MaxPermSize=64m"); buildActionExecutor.withArguments("--info", "--recompile-scripts", GradleConstants.INIT_SCRIPT_CMD_OPTION, initScript.getAbsolutePath()); allModels = buildActionExecutor.run(); assertNotNull(allModels); From 1962693a09ff5a0c5f93ba14cadc4c8d5e0d4196 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Apr 2016 19:17:31 +0200 Subject: [PATCH 09/14] disable help action in progress dialog (IDEA-154798) --- .../src/com/intellij/openapi/ui/DialogWrapper.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index f96d8b5cdff2..75743bade835 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -1695,14 +1695,8 @@ public abstract class DialogWrapper { ActionUtil.registerForEveryKeyboardShortcut(getRootPane(), cancelKeyboardAction, CommonShortcuts.getCloseActiveWindow()); } - if (ApplicationInfo.contextHelpAvailable()) { - ActionListener helpAction = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - doHelpAction(); - } - }; - + if (ApplicationInfo.contextHelpAvailable() && !isProgressDialog()) { + ActionListener helpAction = e -> doHelpAction(); ActionUtil.registerForEveryKeyboardShortcut(getRootPane(), helpAction, CommonShortcuts.getContextHelp()); rootPane.registerKeyboardAction(helpAction, KeyStroke.getKeyStroke(KeyEvent.VK_HELP, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); } From 6e1ccd152726c0950c99940320767675dcfe0c3e Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 26 Apr 2016 19:56:54 +0300 Subject: [PATCH 10/14] inspection tool window: do not need update node with applied fix --- .../codeInspection/ui/ProblemDescriptionNode.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java index b796150505fe..ff390ec20f3f 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java @@ -25,6 +25,7 @@ import com.intellij.codeInspection.ex.InspectionProfileImpl; import com.intellij.codeInspection.ex.InspectionToolWrapper; import com.intellij.codeInspection.reference.RefElement; import com.intellij.codeInspection.reference.RefEntity; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.FileStatus; import com.intellij.psi.PsiElement; import com.intellij.util.containers.FactoryMap; @@ -129,6 +130,13 @@ public class ProblemDescriptionNode extends SuppressableInspectionTreeNode { return FileStatus.NOT_CHANGED; } + @Override + protected void dropCache(Project project) { + if (!isQuickFixAppliedFromView()) { + super.dropCache(project); + } + } + @Override public String calculatePresentableName() { CommonProblemDescriptor descriptor = getDescriptor(); From 5f401a62cbb8ed246ff8a71ef5b9df631722c153 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 26 Apr 2016 19:59:51 +0300 Subject: [PATCH 11/14] inspection tool window: do not need sort list with size == 1 --- .../src/com/intellij/codeInspection/ui/InspectionTree.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java index dc1c645b7168..982f73785e76 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java @@ -337,7 +337,9 @@ public class InspectionTree extends Tree { } if (descriptorChildren != null) { - Collections.sort(descriptorChildren, DESCRIPTOR_COMPARATOR); + if (descriptorChildren.size() > 1) { + Collections.sort(descriptorChildren, DESCRIPTOR_COMPARATOR); + } descriptors.addAll(descriptorChildren); } } From a317b31b59cad42144081b470786699e8fa96547 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Apr 2016 19:28:16 +0200 Subject: [PATCH 12/14] a more local fix for IDEA-154289 PsiClass and view provider can never agree on language --- .../src/com/intellij/psi/ClassFileViewProvider.java | 11 ++--------- .../com/intellij/psi/SingleRootFileViewProvider.java | 8 ++++---- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java b/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java index 18b5c8901fb4..9949b2879057 100644 --- a/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java +++ b/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java @@ -16,7 +16,6 @@ package com.intellij.psi; import com.intellij.ide.highlighter.JavaClassFileType; -import com.intellij.lang.Language; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; @@ -46,17 +45,11 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider { private static final Key IS_INNER_CLASS = Key.create("java.is.inner.class.key"); public ClassFileViewProvider(@NotNull PsiManager manager, @NotNull VirtualFile file) { - super(manager, file); + this(manager, file, true); } public ClassFileViewProvider(@NotNull PsiManager manager, @NotNull VirtualFile file, boolean eventSystemEnabled) { - super(manager, file, eventSystemEnabled, JavaClassFileType.INSTANCE); - } - - @NotNull - @Override - public Language getBaseLanguage() { - return JavaLanguage.INSTANCE; + super(manager, file, eventSystemEnabled, JavaLanguage.INSTANCE, JavaClassFileType.INSTANCE); } @Override diff --git a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index e2d0b39bc816..1cecb94c5bd7 100644 --- a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -293,12 +293,12 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi } public List getCachedPsiFiles() { - return ContainerUtil.createMaybeSingletonList(getCachedPsi(getBaseLanguage())); + return ContainerUtil.createMaybeSingletonList(getCachedPsi(myBaseLanguage)); } @NotNull public List getKnownTreeRoots() { - PsiFile psiFile = getCachedPsi(getBaseLanguage()); + PsiFile psiFile = getCachedPsi(myBaseLanguage); if (!(psiFile instanceof PsiFileImpl)) return Collections.emptyList(); FileElement element = ((PsiFileImpl)psiFile).getTreeElement(); return ContainerUtil.createMaybeSingletonList(element); @@ -457,7 +457,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi @NotNull @Override public SingleRootFileViewProvider createCopy(@NotNull final VirtualFile copy) { - return new SingleRootFileViewProvider(getManager(), copy, false, getBaseLanguage()); + return new SingleRootFileViewProvider(getManager(), copy, false, myBaseLanguage); } @Override @@ -572,7 +572,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi } public void markInvalidated() { - PsiFile psiFile = getCachedPsi(getBaseLanguage()); + PsiFile psiFile = getCachedPsi(myBaseLanguage); if (psiFile instanceof PsiFileEx) { ((PsiFileEx)psiFile).markInvalidated(); } From 66107252479697272406eaae3620e11eafb959ae Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Apr 2016 20:01:20 +0200 Subject: [PATCH 13/14] MethodUtils.isChainable: don't load AST for methods that have non-chainable return type --- .../src/com/siyeh/ig/psiutils/MethodUtils.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodUtils.java index 688c84070fc6..3fc22705a72d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodUtils.java @@ -22,6 +22,7 @@ import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.MethodSignatureBackedByPsiMethod; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.Query; import com.siyeh.HardcodedMethodConstants; @@ -328,6 +329,9 @@ public class MethodUtils { if (method == null) { return false; } + if (!InheritanceUtil.isInheritorOrSelf(method.getContainingClass(), PsiUtil.resolveClassInClassTypeOnly(method.getReturnType()), true)) { + return false; + } final PsiElement navigationElement = method.getNavigationElement(); if (!(navigationElement instanceof PsiMethod)) { return false; From cd0beb166042dde7045a49eb88de1bd05b836d61 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Apr 2016 20:23:26 +0200 Subject: [PATCH 14/14] cache inferred @Contract annotations --- .../ProjectBytecodeAnalysis.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ProjectBytecodeAnalysis.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ProjectBytecodeAnalysis.java index ecd16653a7c3..76323913864b 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ProjectBytecodeAnalysis.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ProjectBytecodeAnalysis.java @@ -33,6 +33,7 @@ import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ConcurrentFactoryMap; import com.intellij.util.containers.Stack; import com.intellij.util.indexing.FileBasedIndex; import org.jetbrains.annotations.NotNull; @@ -218,27 +219,27 @@ public class ProjectBytecodeAnalysis { } public PsiAnnotation getNotNullAnnotation() { - return CachedValuesManager.getManager(myProject).getCachedValue(myProject, new CachedValueProvider() { - @Nullable - @Override - public Result compute() { - return Result.create(createAnnotationFromText("@" + AnnotationUtil.NOT_NULL), ModificationTracker.NEVER_CHANGED); - } - }); + return CachedValuesManager.getManager(myProject).getCachedValue(myProject, () -> + CachedValueProvider.Result.create(createAnnotationFromText("@" + AnnotationUtil.NOT_NULL), ModificationTracker.NEVER_CHANGED)); } public PsiAnnotation getNullableAnnotation() { - return CachedValuesManager.getManager(myProject).getCachedValue(myProject, new CachedValueProvider() { - @Nullable - @Override - public Result compute() { - return Result.create(createAnnotationFromText("@" + AnnotationUtil.NULLABLE), ModificationTracker.NEVER_CHANGED); - } - }); + return CachedValuesManager.getManager(myProject).getCachedValue(myProject, () -> + CachedValueProvider.Result.create(createAnnotationFromText("@" + AnnotationUtil.NULLABLE), ModificationTracker.NEVER_CHANGED)); } public PsiAnnotation createContractAnnotation(String contractValue) { - return createAnnotationFromText("@org.jetbrains.annotations.Contract(" + contractValue + ")"); + Map cache = CachedValuesManager.getManager(myProject).getCachedValue(myProject, () -> { + Map map = new ConcurrentFactoryMap() { + @Nullable + @Override + protected PsiAnnotation create(String attrs) { + return createAnnotationFromText("@org.jetbrains.annotations.Contract(" + attrs + ")"); + } + }; + return CachedValueProvider.Result.create(map, ModificationTracker.NEVER_CHANGED); + }); + return cache.get(contractValue); } @Nullable