User: rednesto Date: 29 Apr 23 11:54 Revision: a1e72ecbff9c81a0e388e9abd8cce063b0403a70 Summary: Disable file writing access checks on creation Fixes minecraft-dev/mcdev-error-report#708 Fixes minecraft-dev/mcdev-error-report#768 Fixes minecraft-dev/mcdev-error-report#796 Fixes minecraft-dev/mcdev-error-report#788 TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=8464&personal=false Index: src/main/kotlin/creator/buildsystem/maven-steps.kt =================================================================== --- src/main/kotlin/creator/buildsystem/maven-steps.kt (revision 1a088b94c292968b1b2e0f4324352013372be3a8) +++ src/main/kotlin/creator/buildsystem/maven-steps.kt (revision a1e72ecbff9c81a0e388e9abd8cce063b0403a70) @@ -140,6 +140,7 @@ // The maven importer requires that the document is saved to disk val document = PsiDocumentManager.getInstance(project).getDocument(pomPsi) ?: return@runWriteAction + PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document) FileDocumentManager.getInstance().saveDocument(document) } } Index: src/main/kotlin/creator/step/AbstractReformatFilesStep.kt =================================================================== --- src/main/kotlin/creator/step/AbstractReformatFilesStep.kt (revision 1a088b94c292968b1b2e0f4324352013372be3a8) +++ src/main/kotlin/creator/step/AbstractReformatFilesStep.kt (revision a1e72ecbff9c81a0e388e9abd8cce063b0403a70) @@ -10,11 +10,11 @@ package com.demonwav.mcdev.creator.step -import com.demonwav.mcdev.util.runWriteTask import com.intellij.codeInsight.actions.ReformatCodeProcessor import com.intellij.ide.wizard.NewProjectWizardStep import com.intellij.openapi.application.ReadAction import com.intellij.openapi.command.WriteCommandAction +import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VfsUtil import com.intellij.psi.PsiFile @@ -44,7 +44,7 @@ } files.ifEmpty { return } - runWriteTask { + NonProjectFileWritingAccessProvider.disableChecksDuring { WriteCommandAction.writeCommandAction(project, *files).withGlobalUndo().run { ReformatCodeProcessor(project, files, null, false).run() } Index: src/main/kotlin/platform/fabric/creator/asset-steps.kt =================================================================== --- src/main/kotlin/platform/fabric/creator/asset-steps.kt (revision 1a088b94c292968b1b2e0f4324352013372be3a8) +++ src/main/kotlin/platform/fabric/creator/asset-steps.kt (revision a1e72ecbff9c81a0e388e9abd8cce063b0403a70) @@ -48,6 +48,7 @@ import com.intellij.json.psi.JsonElementGenerator import com.intellij.json.psi.JsonFile import com.intellij.json.psi.JsonObject +import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages import com.intellij.openapi.util.text.StringUtil @@ -152,6 +153,7 @@ val json = jsonFile.topLevelValue as? JsonObject ?: return val generator = JsonElementGenerator(project) + NonProjectFileWritingAccessProvider.allowWriting(listOf(fabricModJsonFile)) jsonFile.runWriteAction { (json.findProperty("authors")?.value as? JsonArray)?.let { authorsArray -> for (i in authors.indices) { Index: src/main/kotlin/platform/velocity/creator/asset-steps.kt =================================================================== --- src/main/kotlin/platform/velocity/creator/asset-steps.kt (revision 1a088b94c292968b1b2e0f4324352013372be3a8) +++ src/main/kotlin/platform/velocity/creator/asset-steps.kt (revision a1e72ecbff9c81a0e388e9abd8cce063b0403a70) @@ -30,6 +30,7 @@ import com.demonwav.mcdev.util.runWriteAction import com.demonwav.mcdev.util.runWriteTaskInSmartMode import com.intellij.ide.wizard.NewProjectWizardStep +import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider import com.intellij.openapi.project.Project import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.VfsUtil @@ -90,53 +91,55 @@ val authors = data.getUserData(AuthorsStep.KEY) ?: emptyList() val dependencies = data.getUserData(DependStep.KEY) ?: emptyList() + NonProjectFileWritingAccessProvider.disableChecksDuring { - project.runWriteTaskInSmartMode { - val mainClassVirtualFile = VfsUtil.findFile(Path.of(mainClassFile), true) - ?: return@runWriteTaskInSmartMode - val mainClassPsi = PsiManager.getInstance(project).findFile(mainClassVirtualFile) as? PsiJavaFile - ?: return@runWriteTaskInSmartMode + project.runWriteTaskInSmartMode { + val mainClassVirtualFile = VfsUtil.findFile(Path.of(mainClassFile), true) + ?: return@runWriteTaskInSmartMode + val mainClassPsi = PsiManager.getInstance(project).findFile(mainClassVirtualFile) as? PsiJavaFile + ?: return@runWriteTaskInSmartMode - val psiClass = mainClassPsi.classes[0] - val annotation = buildString { - append("@Plugin(") - append("\nid = ${literal(buildSystemProps.artifactId)}") - append(",\nname = ${literal(pluginName)}") + val psiClass = mainClassPsi.classes[0] + val annotation = buildString { + append("@Plugin(") + append("\nid = ${literal(buildSystemProps.artifactId)}") + append(",\nname = ${literal(pluginName)}") - if (isGradle) { - append(",\nversion = BuildConstants.VERSION") - } else { - append(",\nversion = \"${buildSystemProps.version}\"") - } + if (isGradle) { + append(",\nversion = BuildConstants.VERSION") + } else { + append(",\nversion = \"${buildSystemProps.version}\"") + } - if (description.isNotBlank()) { - append(",\ndescription = ${literal(description)}") - } + if (description.isNotBlank()) { + append(",\ndescription = ${literal(description)}") + } - if (website.isNotBlank()) { - append(",\nurl = ${literal(website)}") - } + if (website.isNotBlank()) { + append(",\nurl = ${literal(website)}") + } - if (authors.isNotEmpty()) { - append(",\nauthors = {${authors.joinToString(", ", transform = ::literal)}}") - } + if (authors.isNotEmpty()) { + append(",\nauthors = {${authors.joinToString(", ", transform = ::literal)}}") + } - if (dependencies.isNotEmpty()) { - val deps = dependencies.joinToString(",\n") { "@Dependency(id = ${literal(it)})" } - append(",\ndependencies = {\n$deps\n}") - } + if (dependencies.isNotEmpty()) { + val deps = dependencies.joinToString(",\n") { "@Dependency(id = ${literal(it)})" } + append(",\ndependencies = {\n$deps\n}") + } - append("\n)") - } + append("\n)") + } - val factory = JavaPsiFacade.getElementFactory(project) - val pluginAnnotation = factory.createAnnotationFromText(annotation, null) + val factory = JavaPsiFacade.getElementFactory(project) + val pluginAnnotation = factory.createAnnotationFromText(annotation, null) - mainClassPsi.runWriteAction { - psiClass.modifierList?.let { it.addBefore(pluginAnnotation, it.firstChild) } - CodeStyleManager.getInstance(project).reformat(psiClass) - } - } - } + mainClassPsi.runWriteAction { + psiClass.modifierList?.let { it.addBefore(pluginAnnotation, it.firstChild) } + CodeStyleManager.getInstance(project).reformat(psiClass) + } + } + } + } private fun literal(text: String?): String { if (text == null) {