GradleScriptListener: update lastModifiedFiles on document change

This commit is contained in:
Sergey Rostov
2020-05-06 19:08:27 +03:00
parent 9b0a2f63a9
commit cb318a63ad
3 changed files with 25 additions and 16 deletions
@@ -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
@@ -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
@@ -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)