Skip to content

Commit a04d596

Browse files
embeddedtDenWav
authored andcommitted
Avoid running AWT tasks while holding write lock
1 parent b568d06 commit a04d596

2 files changed

Lines changed: 15 additions & 4 deletions

File tree

src/main/kotlin/facet/MinecraftFacet.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import com.intellij.facet.FacetManager
3535
import com.intellij.facet.FacetTypeId
3636
import com.intellij.facet.FacetTypeRegistry
3737
import com.intellij.ide.projectView.ProjectView
38+
import com.intellij.openapi.application.ApplicationManager
3839
import com.intellij.openapi.application.runReadAction
3940
import com.intellij.openapi.application.runWriteAction
4041
import com.intellij.openapi.module.Module
@@ -77,7 +78,15 @@ class MinecraftFacet(
7778
roots.clear()
7879
}
7980

80-
fun refresh() = runWriteActionAndWait {
81+
fun refresh() {
82+
refreshWritePhase()
83+
// Refresh the project view separately to not hold the write lock
84+
ApplicationManager.getApplication().invokeLater {
85+
ProjectView.getInstance(module.project).refresh()
86+
}
87+
}
88+
89+
private fun refreshWritePhase() = runWriteActionAndWait {
8190
if (module.isDisposed) {
8291
return@runWriteActionAndWait
8392
}
@@ -118,8 +127,6 @@ class MinecraftFacet(
118127

119128
newlyEnabled.forEach(AbstractModule::init)
120129
modules.forEach(AbstractModule::refresh)
121-
122-
ProjectView.getInstance(module.project).refresh()
123130
}
124131

125132
private fun updateRoots() = runWriteAction {

src/main/kotlin/platform/mcp/McpModule.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.demonwav.mcdev.platform.mcp.util.McpConstants
2929
import com.demonwav.mcdev.translations.TranslationFileListener
3030
import com.demonwav.mcdev.util.runWriteTaskLater
3131
import com.intellij.json.JsonFileType
32+
import com.intellij.openapi.application.ApplicationManager
3233
import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
3334
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
3435
import com.intellij.openapi.fileTypes.FileTypeManager
@@ -71,7 +72,10 @@ class McpModule(facet: MinecraftFacet) : AbstractModule(facet) {
7172
}
7273

7374
if (requiresRefresh) {
74-
ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, GradleConstants.SYSTEM_ID))
75+
// Schedule Gradle project refresh outside write lock
76+
ApplicationManager.getApplication().invokeLater {
77+
ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, GradleConstants.SYSTEM_ID))
78+
}
7579
}
7680
}
7781
}

0 commit comments

Comments
 (0)