add SaveAndSyncHandler.getExternalChangesTracker for caching

This simplifies clients and allows them to avoid listening to FrameStateListener.TOPIC when no appropriate disposable available.

GitOrigin-RevId: 4d4e6aa44ef6d2fb0e9b14635bcce41e00b87e14
This commit is contained in:
Sergey Simonchik
2020-05-02 19:46:13 +00:00
committed by intellij-monorepo-bot
parent 9be68d5046
commit 39682cb156
2 changed files with 13 additions and 0 deletions
@@ -128,6 +128,7 @@ internal class SaveAndSyncHandlerImpl : BaseSaveAndSyncHandler(), Disposable {
val busConnection = ApplicationManager.getApplication().messageBus.connect(this)
busConnection.subscribe(FrameStateListener.TOPIC, object : FrameStateListener {
override fun onFrameDeactivated() {
externalChangesModificationTracker.incModificationCount()
if (!settings.isSaveOnFrameDeactivation || !canSyncOrSave()) {
return
}
@@ -254,6 +255,7 @@ internal class SaveAndSyncHandlerImpl : BaseSaveAndSyncHandler(), Disposable {
}
override fun scheduleRefresh() {
externalChangesModificationTracker.incModificationCount()
refreshDelayAlarm.cancelAndRequest()
}
@@ -7,6 +7,8 @@ import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.components.ComponentManager
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.ModificationTracker
import com.intellij.openapi.util.SimpleModificationTracker
import org.jetbrains.annotations.ApiStatus
abstract class SaveAndSyncHandler {
@@ -17,6 +19,8 @@ abstract class SaveAndSyncHandler {
}
}
protected val externalChangesModificationTracker = SimpleModificationTracker()
/**
* Schedule to save documents, all opened projects (or only passed project if not null) and application.
*
@@ -74,4 +78,11 @@ abstract class SaveAndSyncHandler {
@ApiStatus.Experimental
abstract fun saveSettingsUnderModalProgress(componentManager: ComponentManager): Boolean
/**
* @return a modification tracker incrementing when external commands are likely run.
* Currently it happens on IDE frame deactivation and/or [scheduleRefresh] invocation.
*/
@ApiStatus.Experimental
fun getExternalChangesTracker(): ModificationTracker = externalChangesModificationTracker
}