mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[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
This commit is contained in:
committed by
intellij-monorepo-bot
parent
ec05d50276
commit
994ed3ec13
@@ -12,9 +12,6 @@
|
||||
<registryKey defaultValue="false" description="Load project structure from pyproject.toml" key="intellij.python.pyproject.model" restartRequired="true"/>
|
||||
<postStartupActivity implementation="com.intellij.python.pyproject.model.internal.platformBridge.PyProjectSyncActivity"/>
|
||||
</extensions>
|
||||
<actions>
|
||||
<action class="com.intellij.python.pyproject.model.internal.platformBridge.PyProjectTomlSyncAction" id="PyProjectTomlSyncAction"/>
|
||||
</actions>
|
||||
<extensionPoints>
|
||||
<extensionPoint qualifiedName="com.intellij.python.pyproject.model.tool" interface="com.intellij.python.pyproject.model.spi.Tool"
|
||||
dynamic="true"/>
|
||||
|
||||
+8
-8
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
-26
@@ -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<PyProjectAutoImportService>().refresh()
|
||||
}
|
||||
|
||||
override fun update(e: AnActionEvent) {
|
||||
val project = e.project
|
||||
e.presentation.isEnabledAndVisible = project != null && projectModelEnabled && !project.isDefault
|
||||
}
|
||||
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
}
|
||||
Reference in New Issue
Block a user