From 281cb6bd555029e63f21d1c3015d7eaeaa4b4f9d Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 20 Oct 2020 15:45:36 +0300 Subject: [PATCH] IJ-CR-3467: better place for modification tracker of imported data GitOrigin-RevId: 9332665046e27168cd58a558a354086b5962012f --- .../autoimport/AutoImportProjectTracker.kt | 20 +------------------ .../manage/ExternalProjectsDataStorage.java | 6 ++++-- .../execution/GradleRunAnythingProvider.kt | 5 ++--- 3 files changed, 7 insertions(+), 24 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTracker.kt b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTracker.kt index c091de677719..a242e788bb48 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTracker.kt +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTracker.kt @@ -23,20 +23,17 @@ import com.intellij.openapi.observable.properties.AtomicBooleanProperty import com.intellij.openapi.observable.properties.BooleanProperty import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer -import com.intellij.openapi.util.ModificationTracker import com.intellij.openapi.util.registry.Registry import com.intellij.util.LocalTimeCounter.currentTime import com.intellij.util.concurrency.AppExecutorUtil import com.intellij.util.ui.update.MergingUpdateQueue import com.intellij.util.ui.update.Update -import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.TestOnly import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.atomic.AtomicLongFieldUpdater import kotlin.streams.asStream @State(name = "ExternalSystemProjectTracker", storages = [Storage(CACHE_FILE)]) -class AutoImportProjectTracker(private val project: Project) : ExternalSystemProjectTracker, ModificationTracker, PersistentStateComponent { +class AutoImportProjectTracker(private val project: Project) : ExternalSystemProjectTracker, PersistentStateComponent { @Suppress("unused") private val debugThrowable = Throwable("Initialized with project=(${project.isDisposed}, ${Disposer.isDisposed(project)}, $project)") @@ -56,9 +53,6 @@ class AutoImportProjectTracker(private val project: Project) : ExternalSystemPro var isAsyncChangesProcessing by asyncChangesProcessingProperty - @Volatile - private var ownModificationCount = 0L - private fun createProjectChangesListener() = object : ProjectBatchFileChangeListener(project) { override fun batchChangeStarted(activityName: String?) = @@ -81,7 +75,6 @@ class AutoImportProjectTracker(private val project: Project) : ExternalSystemPro override fun afterProjectRefresh(status: ExternalSystemRefreshStatus) { if (status != SUCCESS) projectData.status.markBroken(currentTime()) projectRefreshOperation.finishTask(id) - incrementModificationCount() } } @@ -257,14 +250,6 @@ class AutoImportProjectTracker(private val project: Project) : ExternalSystemPro delayDispatcher.activate() } - override fun getModificationCount(): Long { - return ownModificationCount - } - - private fun incrementModificationCount() { - MOD_COUNT_UPDATER.incrementAndGet(this) - } - @TestOnly fun getActivatedProjects() = projectDataMap.values @@ -341,9 +326,6 @@ class AutoImportProjectTracker(private val project: Project) : ExternalSystemPro companion object { private val LOG = Logger.getInstance("#com.intellij.openapi.externalSystem.autoimport") - @JvmStatic - private val MOD_COUNT_UPDATER = AtomicLongFieldUpdater.newUpdater(AutoImportProjectTracker::class.java, "ownModificationCount") - @TestOnly @JvmStatic fun getInstance(project: Project): AutoImportProjectTracker { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java index f940f04494fc..163fa6793cde 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java @@ -26,6 +26,7 @@ import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectUtil; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.SimpleModificationTracker; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.serialization.ObjectSerializer; @@ -57,7 +58,8 @@ import static com.intellij.openapi.externalSystem.model.ProjectKeys.PROJECT; * @author Vladislav.Soroka */ @State(name = "ExternalProjectsData", storages = @Storage(StoragePathMacros.WORKSPACE_FILE)) -public final class ExternalProjectsDataStorage implements SettingsSavingComponentJavaAdapter, PersistentStateComponent { +public final class ExternalProjectsDataStorage extends SimpleModificationTracker + implements SettingsSavingComponentJavaAdapter, PersistentStateComponent { private static final Logger LOG = Logger.getInstance(ExternalProjectsDataStorage.class); // exposed for tests @@ -233,7 +235,7 @@ public final class ExternalProjectsDataStorage implements SettingsSavingComponen merged.setLastImportTimestamp(lastImportTimestamp); merged.setLastSuccessfulImportTimestamp(lastSuccessfulImportTimestamp); myExternalRootProjects.put(key, merged); - + incModificationCount(); markAsChangedAndScheduleSave(); } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunAnythingProvider.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunAnythingProvider.kt index 32a1e8794d15..adf62415101a 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunAnythingProvider.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunAnythingProvider.kt @@ -10,14 +10,13 @@ import com.intellij.ide.actions.runAnything.activity.RunAnythingCommandLineProvi import com.intellij.ide.actions.runAnything.getPath import com.intellij.ide.util.gotoByName.GotoClassModel2 import com.intellij.openapi.actionSystem.DataContext -import com.intellij.openapi.externalSystem.autoimport.AutoImportProjectTracker import com.intellij.openapi.externalSystem.model.project.ModuleData import com.intellij.openapi.externalSystem.model.task.TaskData +import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsDataStorage import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.findProjectData import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project -import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.text.StringUtil.substringBeforeLast import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager @@ -164,7 +163,7 @@ class GradleRunAnythingProvider : RunAnythingCommandLineProvider() { private fun fetchTasks(project: Project): Map> { return CachedValuesManager.getManager(project).getCachedValue(project) { - CachedValueProvider.Result.create(getGradleTasksMap(project), AutoImportProjectTracker.getInstance(project)) + CachedValueProvider.Result.create(getGradleTasksMap(project), ExternalProjectsDataStorage.getInstance(project)) } }