Reduce UI freezes by preparing affected Gradle project files lists in advance, once per event. isRelevant() method is a hotspot, as it is called for each file in bulk VFS event
This commit is contained in:
committed by
Sergey Rostov
parent
a9e03937a3
commit
04424a1ec3
+7
-2
@@ -9,12 +9,15 @@ import com.intellij.openapi.externalSystem.service.project.autoimport.AsyncFileC
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
|
||||
import java.util.*
|
||||
|
||||
fun addVfsListener(watcher: GradleScriptInputsWatcher) {
|
||||
VirtualFileManager.getInstance().addAsyncFileListener(
|
||||
object : AsyncFileChangeListenerBase() {
|
||||
|
||||
private var files: Set<String> = Collections.emptySet()
|
||||
|
||||
override fun isRelevant(path: String): Boolean {
|
||||
val files = getAffectedGradleProjectFiles(watcher.project)
|
||||
return isInAffectedGradleProjectFiles(files, path)
|
||||
}
|
||||
|
||||
@@ -25,7 +28,9 @@ fun addVfsListener(watcher: GradleScriptInputsWatcher) {
|
||||
// do nothing
|
||||
override fun prepareFileDeletion(file: VirtualFile) {}
|
||||
override fun apply() {}
|
||||
override fun reset() {}
|
||||
override fun reset() {
|
||||
files = getAffectedGradleProjectFiles(watcher.project)
|
||||
}
|
||||
|
||||
},
|
||||
watcher.project,
|
||||
|
||||
+7
-2
@@ -9,12 +9,15 @@ import com.intellij.openapi.externalSystem.autoimport.AsyncFileChangeListenerBas
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
|
||||
import java.util.*
|
||||
|
||||
fun addVfsListener(watcher: GradleScriptInputsWatcher) {
|
||||
VirtualFileManager.getInstance().addAsyncFileListener(
|
||||
object : AsyncFileChangeListenerBase() {
|
||||
|
||||
private var files: Set<String> = Collections.emptySet();
|
||||
|
||||
override fun isRelevant(path: String): Boolean {
|
||||
val files = getAffectedGradleProjectFiles(watcher.project)
|
||||
return isInAffectedGradleProjectFiles(files, path)
|
||||
}
|
||||
|
||||
@@ -24,7 +27,9 @@ fun addVfsListener(watcher: GradleScriptInputsWatcher) {
|
||||
|
||||
// do nothing
|
||||
override fun apply() {}
|
||||
override fun init() {}
|
||||
override fun init() {
|
||||
files = getAffectedGradleProjectFiles(watcher.project)
|
||||
}
|
||||
|
||||
},
|
||||
watcher.project,
|
||||
|
||||
Reference in New Issue
Block a user