From 6c1fd3ef20e81098d248e9dda837cac14b49e021 Mon Sep 17 00:00:00 2001 From: Mikhail Mazurkevich Date: Mon, 21 Aug 2023 15:09:40 +0400 Subject: [PATCH] [wsm] Add more write actions GitOrigin-RevId: 43b06cdfb380c852a6d87ae818c3ce37f7cade56 --- .../impl/jdkDownloader/JdkUpdateTest.kt | 8 ++++---- .../com/intellij/testFramework/IdeaTestUtil.java | 15 ++++++++------- .../openapi/projectRoots/SimpleJavaSdkType.java | 11 ++++++++--- .../testFramework/rules/ProjectModelRule.kt | 9 ++++++++- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/java/idea-ui/testSrc/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkUpdateTest.kt b/java/idea-ui/testSrc/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkUpdateTest.kt index 5c0c0811d62b..4f67680f724b 100644 --- a/java/idea-ui/testSrc/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkUpdateTest.kt +++ b/java/idea-ui/testSrc/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkUpdateTest.kt @@ -67,10 +67,10 @@ class JdkUpdateTest : BareTestFixtureTestCase() { private fun newNotification(sdkName: String, oldVersion: JdkItem = mockZipOld, newVersion: JdkItem = mockZipNew): JdkUpdateNotification? { val oldSdk = ProjectJdkTable.getInstance().findJdk(sdkName) ?: ProjectJdkTable.getInstance().createSdk(sdkName, JavaSdk.getInstance()) - oldSdk.sdkModificator.apply { - homePath = tempDir.newDirectory().toString() - versionString = oldVersion.versionString - }.commitChanges() + val sdkModificator = oldSdk.sdkModificator + sdkModificator.homePath = tempDir.newDirectory().toString() + sdkModificator.versionString = oldVersion.versionString + ApplicationManager.getApplication().runWriteAction { sdkModificator.commitChanges() } if (oldSdk is Disposable) { Disposer.register(testRootDisposable, oldSdk) diff --git a/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java b/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java index 2c0464066cad..b101fe2eceb9 100644 --- a/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java +++ b/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java @@ -4,26 +4,23 @@ package com.intellij.testFramework; import com.intellij.jarRepository.JarRepositoryManager; import com.intellij.jarRepository.RemoteRepositoryDescription; import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.LanguageLevelUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.projectRoots.impl.MockSdk; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.libraries.ui.OrderRoot; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.testFramework.fixtures.MavenDependencyUtil; import com.intellij.util.ArrayUtilRt; import com.intellij.util.PathUtil; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.MultiMap; -import com.intellij.util.io.AppendablePersistentMap; import com.intellij.util.lang.JavaVersion; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -186,9 +183,13 @@ public final class IdeaTestUtil { } JavaSdkImpl.attachJdkAnnotations(sdkModificator); - ApplicationManager.getApplication().runWriteAction(() -> { - sdkModificator.commitChanges(); - }); + Application application = ApplicationManager.getApplication(); + Runnable runnable = () -> sdkModificator.commitChanges(); + if (application.isDispatchThread()) { + application.runWriteAction(runnable); + } else { + application.invokeAndWait(() -> application.runWriteAction(runnable)); + } return sdk; } diff --git a/platform/lang-core/src/com/intellij/openapi/projectRoots/SimpleJavaSdkType.java b/platform/lang-core/src/com/intellij/openapi/projectRoots/SimpleJavaSdkType.java index 2368cfe935c3..a58253cc8b2d 100644 --- a/platform/lang-core/src/com/intellij/openapi/projectRoots/SimpleJavaSdkType.java +++ b/platform/lang-core/src/com/intellij/openapi/projectRoots/SimpleJavaSdkType.java @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.openapi.projectRoots; +import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.impl.SdkVersionUtil; @@ -35,9 +36,13 @@ public class SimpleJavaSdkType extends SdkType implements JavaSdkType { Sdk jdk = ProjectJdkTable.getInstance().createSdk(jdkName, this); SdkModificator sdkModificator = jdk.getSdkModificator(); sdkModificator.setHomePath(FileUtil.toSystemIndependentName(home)); - ApplicationManager.getApplication().runWriteAction(() -> { - sdkModificator.commitChanges(); - }); + Application application = ApplicationManager.getApplication(); + Runnable runnable = () -> sdkModificator.commitChanges(); + if (application.isDispatchThread()) { + application.runWriteAction(runnable); + } else { + application.invokeAndWait(() -> application.runWriteAction(runnable)); + } return jdk; } diff --git a/platform/testFramework/src/com/intellij/testFramework/rules/ProjectModelRule.kt b/platform/testFramework/src/com/intellij/testFramework/rules/ProjectModelRule.kt index e865e6261a5f..b68a90a5d0f6 100644 --- a/platform/testFramework/src/com/intellij/testFramework/rules/ProjectModelRule.kt +++ b/platform/testFramework/src/com/intellij/testFramework/rules/ProjectModelRule.kt @@ -7,6 +7,7 @@ import com.intellij.facet.FacetManager import com.intellij.facet.FacetType import com.intellij.facet.impl.FacetUtil import com.intellij.ide.impl.runUnderModalProgressIfIsEdt +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.application.runWriteActionAndWait @@ -109,7 +110,13 @@ open class ProjectModelRule : TestRule { setup(sdkModificator) } finally { - runWriteAction { sdkModificator.commitChanges() } + val application = ApplicationManager.getApplication() + val runnable = { sdkModificator.commitChanges() } + if (application.isDispatchThread) { + runWriteAction(runnable) + } else { + application.invokeAndWait { runWriteAction(runnable) } + } } }