From 994ed3ec136e47a40b70fa1534515c726f2a9493 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Thu, 25 Dec 2025 21:50:58 +0100 Subject: [PATCH] [python] PY-79486: Fix race in `PyProjectAutoImportService`, remove useless action `PyProjectTomlSyncAction` `dispose` might be called before `projectId` set. Project might be rebuilt using blue refresh icon in any toml file GitOrigin-RevId: 7ed180ec071960ca6b24ef3b2791cad6b1c4d316 --- .../resources/intellij.python.pyproject.xml | 3 --- .../PyProjectAutoImportService.kt | 16 ++++++------ .../platformBridge/PyProjectTomlSyncAction.kt | 26 ------------------- 3 files changed, 8 insertions(+), 37 deletions(-) delete mode 100644 python/python-pyproject/src/com/intellij/python/pyproject/model/internal/platformBridge/PyProjectTomlSyncAction.kt diff --git a/python/python-pyproject/resources/intellij.python.pyproject.xml b/python/python-pyproject/resources/intellij.python.pyproject.xml index a3255842a12d..aec2fbe263b1 100644 --- a/python/python-pyproject/resources/intellij.python.pyproject.xml +++ b/python/python-pyproject/resources/intellij.python.pyproject.xml @@ -12,9 +12,6 @@ - - - diff --git a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/autoImportBridge/PyProjectAutoImportService.kt b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/autoImportBridge/PyProjectAutoImportService.kt index 79d7dca752d2..bd5b3044c5b7 100644 --- a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/autoImportBridge/PyProjectAutoImportService.kt +++ b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/autoImportBridge/PyProjectAutoImportService.kt @@ -16,26 +16,26 @@ internal class PyProjectAutoImportService(private val project: Project) : Dispos } @Volatile - private lateinit var projectId: ExternalSystemProjectId + private var projectId: ExternalSystemProjectId? = null suspend fun start() { val tracker = getTracker() val projectAware = PyExternalSystemProjectAware.create(project) - projectId = projectAware.projectId + val projectId = projectAware.projectId + this.projectId = projectId tracker.register(projectAware) tracker.activate(projectId) - refresh() - } - - fun refresh() { - val tracker = getTracker() tracker.markDirty(projectId) tracker.scheduleProjectRefresh() } + override fun dispose() { - getTracker().remove(projectId) + projectId?.let { + getTracker().remove(it) + projectId = null + } } diff --git a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/platformBridge/PyProjectTomlSyncAction.kt b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/platformBridge/PyProjectTomlSyncAction.kt deleted file mode 100644 index 99efdd6cdc8d..000000000000 --- a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/platformBridge/PyProjectTomlSyncAction.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.intellij.python.pyproject.model.internal.platformBridge - -import com.intellij.openapi.actionSystem.ActionUpdateThread -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.components.service -import com.intellij.python.pyproject.model.internal.autoImportBridge.PyProjectAutoImportService -import com.intellij.python.pyproject.model.internal.projectModelEnabled - -internal class PyProjectTomlSyncAction : AnAction() { - - override fun actionPerformed(e: AnActionEvent) { - val project = e.project ?: return - if (!projectModelEnabled || project.isDefault) { // Service doesn't support default project - return - } - project.service().refresh() - } - - override fun update(e: AnActionEvent) { - val project = e.project - e.presentation.isEnabledAndVisible = project != null && projectModelEnabled && !project.isDefault - } - - override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT -} \ No newline at end of file