Skip to content

Commit dd07afd

Browse files
committed
Fix write-unsafe VFS refresh when loading templates
Replace RefreshQueue.refresh() wrapped in writeAction with VirtualFile.refresh() invoked via Application.invokeAndWait(..., modalityState). This preserves the current wizard/dialog modality state and avoids Write-unsafe context! failures on newer IntelliJ Platform builds.
1 parent 3e136d0 commit dd07afd

File tree

2 files changed

+10
-17
lines changed

2 files changed

+10
-17
lines changed

src/main/kotlin/creator/custom/providers/TemplateProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ interface TemplateProvider {
155155

156156
try {
157157
return file.refreshSync(modalityState)
158-
?.inputStream?.reader()?.use { TemplateResourceBundle(it, parent) }
158+
.inputStream.reader().use { TemplateResourceBundle(it, parent) }
159159
} catch (t: Throwable) {
160160
if (t is ControlFlowException) {
161161
return parent

src/main/kotlin/util/files.kt

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ package com.demonwav.mcdev.util
2222

2323
import com.intellij.openapi.application.ApplicationManager
2424
import com.intellij.openapi.application.ModalityState
25-
import com.intellij.openapi.application.writeAction
2625
import com.intellij.openapi.vfs.LocalFileSystem
2726
import com.intellij.openapi.vfs.VfsUtilCore
2827
import com.intellij.openapi.vfs.VirtualFile
29-
import com.intellij.openapi.vfs.newvfs.RefreshQueue
3028
import java.io.File
3129
import java.io.IOException
3230
import java.nio.file.Path
@@ -79,18 +77,13 @@ val VirtualFile.mcDomainAndPath: Pair<String, String>?
7977
operator fun Manifest.get(attribute: String): String? = mainAttributes.getValue(attribute)
8078
operator fun Manifest.get(attribute: Attributes.Name): String? = mainAttributes.getValue(attribute)
8179

82-
suspend fun VirtualFile.refreshSync(modalityState: ModalityState): VirtualFile? {
83-
fun refresh() {
84-
RefreshQueue.getInstance().refresh(false, this.isDirectory, null, modalityState, this)
85-
}
86-
87-
if (ApplicationManager.getApplication().isWriteAccessAllowed) {
88-
refresh()
89-
} else {
90-
writeAction {
91-
refresh()
92-
}
93-
}
94-
95-
return this.parent?.findOrCreateChildData(this, this.name)
80+
suspend fun VirtualFile.refreshSync(modalityState: ModalityState): VirtualFile {
81+
val file = this
82+
ApplicationManager.getApplication().invokeAndWait(
83+
{
84+
file.refresh(false, true)
85+
},
86+
modalityState
87+
)
88+
return file
9689
}

0 commit comments

Comments
 (0)