[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
This commit is contained in:
Konstantin Hudyakov
2026-08-04 14:03:36 +00:00
committed by intellij-monorepo-bot
parent 74539bdc48
commit 458fed1952
3 changed files with 6 additions and 24 deletions
@@ -46,12 +46,6 @@ internal class TerminalTabsManager(private val project: Project, private val cor
}
}
suspend fun getTerminalTabs(): List<TerminalSessionTab> {
return tabsLock.withLock {
getTerminalTabsNoLock()
}
}
/** Caller must hold [tabsLock] */
private fun getTerminalTabsNoLock(): List<TerminalSessionTab> {
return tabsMap.values.toList()
@@ -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<TerminalSessionTab> = TerminalTabsManager.getInstance(manager.project).getTerminalTabs()
val tabs: List<TerminalSessionPersistedTab> = 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<TerminalSessionTab>, manager: TerminalToolWindowTabsManagerImpl) {
private fun restoreTabs(tabs: List<TerminalSessionPersistedTab>, 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)
}
@@ -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)