From 458fed1952f8bed5223aac83bc4538ca137feb3e Mon Sep 17 00:00:00 2001 From: Konstantin Hudyakov Date: Thu, 9 Jul 2026 17:47:29 +0300 Subject: [PATCH] [terminal] IJPL-212254 Use TerminaltabsStorage directly during tabs restor It is a breaking change now because it is a part of larger refactoring. (cherry picked from commit 5f1cf3409a16f815d4de21d1dd2adb46b0b195dd) IJ-CR-214214 GitOrigin-RevId: 2ab4081c0419bd55f8f6384e3f26323c179ef402 --- .../frontend/session/TerminalTabsManager.kt | 6 ------ .../impl/TerminalToolWindowTabsManagerImpl.kt | 18 ++++-------------- .../frontend/view/impl/TerminalViewFactory.kt | 6 ++---- 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/session/TerminalTabsManager.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/session/TerminalTabsManager.kt index 66f194ff629e..5fb89d3c5d5a 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/session/TerminalTabsManager.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/session/TerminalTabsManager.kt @@ -46,12 +46,6 @@ internal class TerminalTabsManager(private val project: Project, private val cor } } - suspend fun getTerminalTabs(): List { - return tabsLock.withLock { - getTerminalTabsNoLock() - } - } - /** Caller must hold [tabsLock] */ private fun getTerminalTabsNoLock(): List { return tabsMap.values.toList() diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt index 0e9d9e876da2..5caf7ca9d6ed 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt @@ -20,7 +20,6 @@ import com.intellij.platform.util.coroutines.childScope import com.intellij.terminal.frontend.action.TerminalAgentsAvailabilityService import com.intellij.terminal.frontend.action.TerminalRenameTabAction import com.intellij.terminal.frontend.fus.TerminalFocusFusService -import com.intellij.terminal.frontend.session.TerminalTabsManager import com.intellij.terminal.frontend.toolwindow.TerminalTabsManagerListener import com.intellij.terminal.frontend.toolwindow.TerminalToolWindowTab import com.intellij.terminal.frontend.toolwindow.TerminalToolWindowTabBuilder @@ -48,10 +47,11 @@ import org.jetbrains.plugins.terminal.TerminalTabCloseListener import org.jetbrains.plugins.terminal.TerminalToolWindowFactory import org.jetbrains.plugins.terminal.TerminalToolWindowInitializer import org.jetbrains.plugins.terminal.TerminalToolWindowPanel -import org.jetbrains.plugins.terminal.block.reworked.session.TerminalSessionTab import org.jetbrains.plugins.terminal.fus.ReworkedTerminalUsageCollector import org.jetbrains.plugins.terminal.fus.TerminalStartupFusInfo import org.jetbrains.plugins.terminal.fus.TerminalTabOpeningWay +import org.jetbrains.plugins.terminal.settings.impl.TerminalSessionPersistedTab +import org.jetbrains.plugins.terminal.settings.impl.TerminalTabsStorage import org.jetbrains.plugins.terminal.startup.TerminalProcessType import org.jetbrains.plugins.terminal.util.TerminalTitleUtils.createDefaultTabName import java.lang.ref.WeakReference @@ -260,7 +260,6 @@ internal class TerminalToolWindowTabsManagerImpl( val terminal = createTerminalView( project = project, options = viewOptions, - existingBackendTabId = builder.backendTabId, coroutineScope = coroutineScope.childScope("TerminalView") ) terminal.title.change { @@ -316,7 +315,7 @@ internal class TerminalToolWindowTabsManagerImpl( private fun scheduleTabsRestoring(manager: TerminalToolWindowTabsManagerImpl) { if (TrustedProjects.isProjectTrusted(manager.project)) { manager.tabsRestoredDeferred = manager.coroutineScope.async { - val tabs: List = TerminalTabsManager.getInstance(manager.project).getTerminalTabs() + val tabs: List = TerminalTabsStorage.getInstance(manager.project).getStoredTabs() withContext(Dispatchers.EDT + ModalityState.any().asContextElement()) { restoreTabs(tabs, manager) } @@ -324,7 +323,7 @@ internal class TerminalToolWindowTabsManagerImpl( } } - private fun restoreTabs(tabs: List, manager: TerminalToolWindowTabsManagerImpl) { + private fun restoreTabs(tabs: List, manager: TerminalToolWindowTabsManagerImpl) { for (tab in tabs) { val builder = manager.createTabBuilder() as TerminalToolWindowTabBuilderImpl with(builder) { @@ -334,7 +333,6 @@ internal class TerminalToolWindowTabsManagerImpl( processType(tab.processType ?: TerminalProcessType.SHELL) tabName(tab.name) userDefinedName(tab.isUserDefinedName) - backendTabId(tab.id) requestFocus(false) // Otherwise it may trigger the tool window showing // Pass null as a trigger time because we don't need to track latency in this case. startupFusInfo(TerminalStartupFusInfo(TerminalTabOpeningWay.TABS_RESTORE, triggerTime = null)) @@ -380,9 +378,6 @@ internal class TerminalToolWindowTabsManagerImpl( var startupFusInfo: TerminalStartupFusInfo? = null private set - var backendTabId: Int? = null - private set - override fun workingDirectory(directory: String?): TerminalToolWindowTabBuilder { workingDirectory = directory return this @@ -448,11 +443,6 @@ internal class TerminalToolWindowTabsManagerImpl( return this } - fun backendTabId(id: Int?): TerminalToolWindowTabBuilder { - backendTabId = id - return this - } - override fun createTab(): TerminalToolWindowTab { return createTab(this) } diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewFactory.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewFactory.kt index a8dfc956b6ff..fcf62dbfec58 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewFactory.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewFactory.kt @@ -37,7 +37,6 @@ import org.jetbrains.plugins.terminal.block.ui.TerminalUiUtils internal fun createTerminalView( project: Project, options: TerminalViewBuilderOptions, - existingBackendTabId: Int?, coroutineScope: CoroutineScope, ): TerminalView { val terminalView = TerminalViewImpl( @@ -47,7 +46,7 @@ internal fun createTerminalView( coroutineScope = coroutineScope, sourceNavigationProjectPath = options.sourceNavigationProjectPath, ) - createBackendTabAndStartSession(project, terminalView, options, existingBackendTabId) + createBackendTabAndStartSession(project, terminalView, options) return terminalView } @@ -56,9 +55,8 @@ private fun createBackendTabAndStartSession( project: Project, terminal: TerminalViewImpl, options: TerminalViewBuilderOptions, - existingBackendTabId: Int?, ) = terminal.coroutineScope.launch { - val backendTabId = existingBackendTabId ?: TerminalTabsManager.getInstance(project).createNewTerminalTab().id + val backendTabId = TerminalTabsManager.getInstance(project).createNewTerminalTab().id terminal.coroutineScope.awaitCancellationAndInvoke(Dispatchers.EDT) { TerminalTabsManager.getInstance(project).closeTerminalTab(backendTabId)