From 39682cb1562d0f7f16df25f1716c8be356ee3484 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Sat, 2 May 2020 21:21:10 +0300 Subject: [PATCH] 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 --- .../src/SaveAndSyncHandlerImpl.kt | 2 ++ .../src/com/intellij/ide/SaveAndSyncHandler.kt | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt b/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt index 67b121f49270..0ebd836e5acd 100644 --- a/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt +++ b/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt @@ -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() } diff --git a/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt b/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt index c1c7dafc48ed..0df2e909aabb 100644 --- a/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt +++ b/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt @@ -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 }