User: embeddedt Date: 21 Mar 26 19:04 Revision: a04d5960eba2c737d92c6a751d0b66edfa9dca3c Summary: Avoid running AWT tasks while holding write lock TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10462&personal=false Index: src/main/kotlin/facet/MinecraftFacet.kt =================================================================== --- src/main/kotlin/facet/MinecraftFacet.kt (revision b568d06142977dcf39328de3dc6dbbd1cc5b0fd0) +++ src/main/kotlin/facet/MinecraftFacet.kt (revision a04d5960eba2c737d92c6a751d0b66edfa9dca3c) @@ -35,6 +35,7 @@ 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 @@ 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 @@ newlyEnabled.forEach(AbstractModule::init) modules.forEach(AbstractModule::refresh) - - ProjectView.getInstance(module.project).refresh() } private fun updateRoots() = runWriteAction { Index: src/main/kotlin/platform/mcp/McpModule.kt =================================================================== --- src/main/kotlin/platform/mcp/McpModule.kt (revision b568d06142977dcf39328de3dc6dbbd1cc5b0fd0) +++ src/main/kotlin/platform/mcp/McpModule.kt (revision a04d5960eba2c737d92c6a751d0b66edfa9dca3c) @@ -29,6 +29,7 @@ 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,10 +72,13 @@ } if (requiresRefresh) { + // Schedule Gradle project refresh outside write lock + ApplicationManager.getApplication().invokeLater { - ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)) - } - } - } + ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)) + } + } + } + } private fun initSrg() { val settings = getSettings()