From ac70234342f73d3cd5c661b60cfc011da960ade4 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Fri, 8 May 2020 20:50:59 +0300 Subject: [PATCH] 201: proper implementation for AsyncFileChangeListenerHelper.kt updateFile is called before changes in vfs, so the timestamp is old there. The proper implementation is to collect changed files in list and get timestamp in apply. --- .../AsyncFileChangeListenerHelper.kt.201 | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/AsyncFileChangeListenerHelper.kt.201 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/AsyncFileChangeListenerHelper.kt.201 index 1488d07332f..77ed5aa9825 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/AsyncFileChangeListenerHelper.kt.201 +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/AsyncFileChangeListenerHelper.kt.201 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.idea.scripting.gradle import com.intellij.openapi.externalSystem.autoimport.AsyncFileChangeListenerBase +import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.openapi.vfs.newvfs.events.VFileEvent @@ -17,18 +18,27 @@ fun addVfsListener( ) { VirtualFileManager.getInstance().addAsyncFileListener( object : AsyncFileChangeListenerBase() { + val changedFiles = mutableListOf() + + override fun init() { + changedFiles.clear() + } + override fun isRelevant(path: String): Boolean { return buildRootsManager.maybeAffectedGradleProjectFile(path) } override fun updateFile(file: VirtualFile, event: VFileEvent) { - watcher.fileChanged(event.path, file.timeStamp) + changedFiles.add(event.path) } - // do nothing - override fun apply() {} - override fun init() {} - + override fun apply() { + changedFiles.forEach { + LocalFileSystem.getInstance().findFileByPath(it)?.let { f -> + watcher.fileChanged(f.path, f.timeStamp) + } + } + } }, watcher.project )