From cb385b97822a8a3fb973e60e395514553e776a78 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 21 Mar 2026 15:04:15 -0400 Subject: [PATCH] Avoid running AWT tasks while holding write lock --- src/main/kotlin/facet/MinecraftFacet.kt | 13 ++++++++++--- src/main/kotlin/platform/mcp/McpModule.kt | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/facet/MinecraftFacet.kt b/src/main/kotlin/facet/MinecraftFacet.kt index 85e2ef560..349136246 100644 --- a/src/main/kotlin/facet/MinecraftFacet.kt +++ b/src/main/kotlin/facet/MinecraftFacet.kt @@ -35,6 +35,7 @@ import com.intellij.facet.FacetManager import com.intellij.facet.FacetTypeId import com.intellij.facet.FacetTypeRegistry import com.intellij.ide.projectView.ProjectView +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.module.Module @@ -77,7 +78,15 @@ class MinecraftFacet( roots.clear() } - fun refresh() = runWriteActionAndWait { + fun refresh() { + refreshWritePhase() + // Refresh the project view separately to not hold the write lock + ApplicationManager.getApplication().invokeLater { + ProjectView.getInstance(module.project).refresh() + } + } + + private fun refreshWritePhase() = runWriteActionAndWait { if (module.isDisposed) { return@runWriteActionAndWait } @@ -118,8 +127,6 @@ class MinecraftFacet( newlyEnabled.forEach(AbstractModule::init) modules.forEach(AbstractModule::refresh) - - ProjectView.getInstance(module.project).refresh() } private fun updateRoots() = runWriteAction { diff --git a/src/main/kotlin/platform/mcp/McpModule.kt b/src/main/kotlin/platform/mcp/McpModule.kt index 4866e7168..600cac781 100644 --- a/src/main/kotlin/platform/mcp/McpModule.kt +++ b/src/main/kotlin/platform/mcp/McpModule.kt @@ -29,6 +29,7 @@ import com.demonwav.mcdev.platform.mcp.util.McpConstants import com.demonwav.mcdev.translations.TranslationFileListener import com.demonwav.mcdev.util.runWriteTaskLater import com.intellij.json.JsonFileType +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder import com.intellij.openapi.externalSystem.util.ExternalSystemUtil import com.intellij.openapi.fileTypes.FileTypeManager @@ -71,7 +72,10 @@ class McpModule(facet: MinecraftFacet) : AbstractModule(facet) { } if (requiresRefresh) { - ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)) + // Schedule Gradle project refresh outside write lock + ApplicationManager.getApplication().invokeLater { + ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)) + } } } }