From 4c87dc672d9d1f4afbf83cec9c2061f3f30cb835 Mon Sep 17 00:00:00 2001 From: marcin Date: Thu, 21 Nov 2024 12:53:55 +0000 Subject: [PATCH] fix: Save dotfile in dumb background task (#169) * Save dotfile as dumb background task * remove wrappers as they are included already inside save and remove methods * merge main * spotless * Wait for smart mode in tests --- .../vaadin/plugin/copilot/CopilotPluginUtil.kt | 16 ++++++++++++++-- .../listeners/CopilotVaadinProjectListener.kt | 10 ++-------- .../copilot/service/CopilotUndoManagerTest.kt | 2 ++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt b/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt index 2a77eac..538afcf 100644 --- a/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt +++ b/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt @@ -9,9 +9,11 @@ import com.intellij.openapi.application.runInEdt import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.extensions.PluginId import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.progress.ProgressIndicator +import com.intellij.openapi.project.DumbModeTask +import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.intellij.openapi.project.guessProjectDir -import com.intellij.openapi.project.modules import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.vfs.* @@ -38,7 +40,7 @@ class CopilotPluginUtil { val outputPath: String? ) - @JvmRecord data class ProjectInfo(val basePath: String?, val modules: List) + @JvmRecord data class ProjectInfo(val basePath: String?, val modules: List) companion object { @@ -96,6 +98,16 @@ class CopilotPluginUtil { } fun saveDotFile(project: Project) { + val task = + object : DumbModeTask() { + override fun performInDumbMode(progressIndicator: ProgressIndicator) { + saveDotFileInternal(project) + } + } + DumbService.getInstance(project).queueTask(task) + } + + private fun saveDotFileInternal(project: Project) { val dotFileDirectory = getDotFileDirectory(project) if (dotFileDirectory != null) { val props = Properties() diff --git a/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt b/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt index 5292cd1..c9f3683 100644 --- a/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt +++ b/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt @@ -1,7 +1,5 @@ package com.vaadin.plugin.copilot.listeners -import com.intellij.openapi.application.WriteAction -import com.intellij.openapi.application.runInEdt import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.project.ProjectManagerListener @@ -16,12 +14,8 @@ class CopilotVaadinProjectListener : VaadinProjectListener { override fun vaadinProjectDetected(project: Project) { if (!triggered) { triggered = true - runInEdt { - WriteAction.run { - saveDotFile(project) - removeDotFileOnExit(project) - } - } + saveDotFile(project) + removeDotFileOnExit(project) } } diff --git a/src/test/kotlin/com/vaadin/plugin/copilot/service/CopilotUndoManagerTest.kt b/src/test/kotlin/com/vaadin/plugin/copilot/service/CopilotUndoManagerTest.kt index 32cc45e..3d71880 100644 --- a/src/test/kotlin/com/vaadin/plugin/copilot/service/CopilotUndoManagerTest.kt +++ b/src/test/kotlin/com/vaadin/plugin/copilot/service/CopilotUndoManagerTest.kt @@ -6,6 +6,7 @@ import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.command.UndoConfirmationPolicy import com.intellij.openapi.editor.Document import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.project.DumbService import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.findDocument @@ -31,6 +32,7 @@ class CopilotUndoManagerTest : BasePlatformTestCase() { @BeforeEach fun setup() { super.setUp() + DumbService.getInstance(project).waitForSmartMode() tempFile = File("${project.basePath}/${UUID.random().text}.tmp") tempFile.deleteOnExit() Files.createDirectories(Path.of(project.basePath))