IJ-CR-3467: better place for modification tracker of imported data

GitOrigin-RevId: 9332665046e27168cd58a558a354086b5962012f
This commit is contained in:
Vladislav.Soroka
2020-10-20 13:26:08 +00:00
committed by intellij-monorepo-bot
parent 74c1c18870
commit 281cb6bd55
3 changed files with 7 additions and 24 deletions
@@ -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<AutoImportProjectTracker.State> {
class AutoImportProjectTracker(private val project: Project) : ExternalSystemProjectTracker, PersistentStateComponent<AutoImportProjectTracker.State> {
@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 {
@@ -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<ExternalProjectsDataStorage.State> {
public final class ExternalProjectsDataStorage extends SimpleModificationTracker
implements SettingsSavingComponentJavaAdapter, PersistentStateComponent<ExternalProjectsDataStorage.State> {
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();
}
@@ -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<String, MultiMap<String, TaskData>> {
return CachedValuesManager.getManager(project).getCachedValue(project) {
CachedValueProvider.Result.create(getGradleTasksMap(project), AutoImportProjectTracker.getInstance(project))
CachedValueProvider.Result.create(getGradleTasksMap(project), ExternalProjectsDataStorage.getInstance(project))
}
}