From d84acb8ca2f369bb2c8623fc6576fab4c895f6b1 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Wed, 6 May 2020 19:08:27 +0300 Subject: [PATCH] GradleScriptListener: update lastModifiedFiles on document change --- .../scripting/gradle/GradleScriptListener.kt | 25 +++++++++---------- .../legacy/GradleLegacyScriptListener.kt | 8 ++++-- .../gradle/roots/GradleBuildRootsManager.kt | 8 +++++- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListener.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListener.kt index fa3c91e449e..7369df8e06b 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListener.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListener.kt @@ -17,22 +17,21 @@ class GradleScriptListener(project: Project) : ScriptChangeListener(project) { addVfsListener(this) } - fun fileChanged(filePath: String, ts: Long) { - // NOTE: this is required for legacy roots too - val root = GradleBuildRootsManager.getInstance(project) - .findScriptBuildRoot(filePath, searchNearestLegacy = false) - ?.root as? GradleBuildRoot.Linked + fun fileChanged(filePath: String, ts: Long) = + GradleBuildRootsManager.getInstance(project).fileChanged(filePath, ts) - root?.fileChanged(filePath, ts) + override fun isApplicable(vFile: VirtualFile) = + GradleBuildRootsManager.getInstance(project).isApplicable(vFile) + + override fun editorActivated(vFile: VirtualFile) = + checkUpToDate(vFile) + + override fun documentChanged(vFile: VirtualFile) { + fileChanged(vFile.path, System.currentTimeMillis()) + checkUpToDate(vFile) } - override fun isApplicable(vFile: VirtualFile) = GradleBuildRootsManager.getInstance(project).isApplicable(vFile) - - override fun editorActivated(vFile: VirtualFile) = checkUpToDate(vFile) - - override fun documentChanged(vFile: VirtualFile) = checkUpToDate(vFile) - - fun checkUpToDate(vFile: VirtualFile) { + private fun checkUpToDate(vFile: VirtualFile) { val upToDate = GradleBuildRootsManager.getInstance(project) .getScriptInfo(vFile)?.model?.inputs?.isUpToDate(project, vFile) ?: return diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/legacy/GradleLegacyScriptListener.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/legacy/GradleLegacyScriptListener.kt index 347b6ec70fd..c7b5b6a195e 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/legacy/GradleLegacyScriptListener.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/legacy/GradleLegacyScriptListener.kt @@ -5,11 +5,13 @@ package org.jetbrains.kotlin.idea.scripting.gradle.legacy -import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangeListener -import org.jetbrains.kotlin.idea.scripting.gradle.* +import org.jetbrains.kotlin.idea.scripting.gradle.isGradleKotlinScript +import org.jetbrains.kotlin.idea.scripting.gradle.isInAffectedGradleProjectFiles +import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager +import org.jetbrains.kotlin.idea.scripting.gradle.useScriptConfigurationFromImportOnly class GradleLegacyScriptListener(project: Project) : ScriptChangeListener(project) { override fun isApplicable(vFile: VirtualFile): Boolean { @@ -30,6 +32,8 @@ class GradleLegacyScriptListener(project: Project) : ScriptChangeListener(projec override fun documentChanged(vFile: VirtualFile) { if (!isInAffectedGradleProjectFiles(project, vFile.path)) return + GradleBuildRootsManager.getInstance(project).fileChanged(vFile.path) + val file = getAnalyzableKtFileForScript(vFile) if (file != null) { // *.gradle.kts file was changed diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt index 7fdda436846..fc09f4990d0 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt @@ -31,6 +31,7 @@ import org.jetbrains.plugins.gradle.settings.* import org.jetbrains.plugins.gradle.util.GradleConstants import java.io.File import java.nio.file.Paths +import java.util.concurrent.CompletableFuture import java.util.concurrent.atomic.AtomicBoolean /** @@ -118,7 +119,7 @@ class GradleBuildRootsManager(val project: Project) : ScriptingSupport.Provider( fun findScriptBuildRoot(gradleKtsFile: VirtualFile): ScriptUnderRoot? = findScriptBuildRoot(gradleKtsFile.path) - fun findScriptBuildRoot(filePath: String, searchNearestLegacy: Boolean = true): ScriptUnderRoot? { + private fun findScriptBuildRoot(filePath: String, searchNearestLegacy: Boolean = true): ScriptUnderRoot? { if (!filePath.endsWith(".gradle.kts")) return null val scriptInfo = getScriptInfo(filePath) @@ -151,6 +152,11 @@ class GradleBuildRootsManager(val project: Project) : ScriptingSupport.Provider( fun getBuildRoot(gradleWorkingDir: String) = roots.getBuildRoot(gradleWorkingDir) + fun fileChanged(filePath: String, ts: Long = System.currentTimeMillis()) { + val root = findScriptBuildRoot(filePath, searchNearestLegacy = false)?.root as? GradleBuildRoot.Linked + root?.fileChanged(filePath, ts) + } + fun markImportingInProgress(workingDir: String, inProgress: Boolean = true) { actualizeBuildRoot(workingDir)?.importing = inProgress updateNotifications(workingDir)