From 1d061a0ffdb42829cd8055ade11d7b88f14e0250 Mon Sep 17 00:00:00 2001 From: Nicolas QUINQUENEL Date: Tue, 24 Sep 2024 09:51:56 +0200 Subject: [PATCH] SLI-1616 Send file to backend when opening a file (#1177) --- .../its/fixtures/FileBrowserDialogFixture.kt | 2 +- .../intellij/trigger/EditorOpenTrigger.java | 14 +++++++++++++- .../intellij/trigger/EditorOpenTriggerTests.java | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/its/src/test/kotlin/org/sonarlint/intellij/its/fixtures/FileBrowserDialogFixture.kt b/its/src/test/kotlin/org/sonarlint/intellij/its/fixtures/FileBrowserDialogFixture.kt index 951d5519f..1f0f75a6d 100644 --- a/its/src/test/kotlin/org/sonarlint/intellij/its/fixtures/FileBrowserDialogFixture.kt +++ b/its/src/test/kotlin/org/sonarlint/intellij/its/fixtures/FileBrowserDialogFixture.kt @@ -64,7 +64,7 @@ class FileBrowserDialogFixture( val projectsDir = Paths.get("projects").toAbsolutePath() val projectBaseDir = projectsDir.resolve("$projectName-tmp") val button = button("OK") - waitFor { button.isEnabled() } + waitFor(Duration.ofSeconds(10)) { button.isEnabled() } // Select parent folder and refresh textField.text = projectsDir.normalize().toString() diff --git a/src/main/java/org/sonarlint/intellij/trigger/EditorOpenTrigger.java b/src/main/java/org/sonarlint/intellij/trigger/EditorOpenTrigger.java index da72314c0..9934e20e1 100644 --- a/src/main/java/org/sonarlint/intellij/trigger/EditorOpenTrigger.java +++ b/src/main/java/org/sonarlint/intellij/trigger/EditorOpenTrigger.java @@ -22,8 +22,14 @@ import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManagerListener; import com.intellij.openapi.vfs.VirtualFile; +import java.util.List; +import java.util.Map; import org.jetbrains.annotations.NotNull; import org.sonarlint.intellij.analysis.AnalysisSubmitter; +import org.sonarlint.intellij.core.BackendService; +import org.sonarlint.intellij.fs.VirtualFileEvent; +import org.sonarlint.intellij.util.SonarLintAppUtils; +import org.sonarsource.sonarlint.plugin.api.module.file.ModuleFileEvent; import static org.sonarlint.intellij.common.util.SonarLintUtils.getService; import static org.sonarlint.intellij.util.ThreadUtilsKt.runOnPooledThread; @@ -32,6 +38,12 @@ public class EditorOpenTrigger implements FileEditorManagerListener { @Override public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) { - runOnPooledThread(source.getProject(), () -> getService(source.getProject(), AnalysisSubmitter.class).autoAnalyzeFile(file, TriggerType.EDITOR_OPEN)); + runOnPooledThread(source.getProject(), () -> { + var module = SonarLintAppUtils.findModuleForFile(file, source.getProject()); + if (module != null) { + getService(BackendService.class).updateFileSystem(Map.of(module, List.of(new VirtualFileEvent(ModuleFileEvent.Type.CREATED, file)))); + } + getService(source.getProject(), AnalysisSubmitter.class).autoAnalyzeFile(file, TriggerType.EDITOR_OPEN); + }); } } diff --git a/src/test/java/org/sonarlint/intellij/trigger/EditorOpenTriggerTests.java b/src/test/java/org/sonarlint/intellij/trigger/EditorOpenTriggerTests.java index b45367c54..a6113c950 100644 --- a/src/test/java/org/sonarlint/intellij/trigger/EditorOpenTriggerTests.java +++ b/src/test/java/org/sonarlint/intellij/trigger/EditorOpenTriggerTests.java @@ -29,6 +29,7 @@ import org.sonarlint.intellij.analysis.AnalysisSubmitter; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; @@ -50,6 +51,7 @@ void start() { file = createAndOpenTestVirtualFile("MyClass.java", Language.findLanguageByID("JAVA"), "class MyClass{}"); editorManager = mock(FileEditorManager.class); when(editorManager.getProject()).thenReturn(getProject()); + reset(analysisSubmitter); } @Test