diff --git a/platform/platform-api/src/com/intellij/ui/tabs/TabInfo.kt b/platform/platform-api/src/com/intellij/ui/tabs/TabInfo.kt index ef74510fa13b..124ce45c1001 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/TabInfo.kt +++ b/platform/platform-api/src/com/intellij/ui/tabs/TabInfo.kt @@ -297,7 +297,7 @@ class TabInfo(var component: JComponent) : Queryable, PlaceProvider { changeSupport.firePropertyChange(ALERT_STATUS, null, false) } - override fun toString(): String = LoadingNode.getText() + override fun toString(): String = text fun getAlertIcon(): AlertIcon = alertIcon ?: DEFAULT_ALERT_ICON diff --git a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.kt b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.kt index f47b01507a34..bff30cf51fb0 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.kt +++ b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.kt @@ -2464,10 +2464,13 @@ open class JBTabsImpl internal constructor( val toSelect = if (forcedSelectionTransfer == null) { getToSelectOnRemoveOf(info!!) } - else { - assert(visibleInfos.contains(forcedSelectionTransfer)) { "Cannot find tab for selection transfer, tab=$forcedSelectionTransfer" } + else if (visibleInfos.contains(forcedSelectionTransfer)) { forcedSelectionTransfer } + else { + LOG.error("Cannot find tab for selection transfer, tab=$forcedSelectionTransfer") + getToSelectOnRemoveOf(info!!) + } val result = ActionCallback() if (toSelect == null) { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.kt b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.kt index 7d6c97b547de..9645112788c9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.kt +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.kt @@ -730,8 +730,12 @@ class EditorWindow internal constructor( fileBeingClosed: VirtualFile, componentIndex: Int, ): TabInfo? { - tabBeingClosed.previousSelection?.let { - return it + val previousSelection = tabBeingClosed.previousSelection + if (previousSelection != null) { + // the WeakReference might reference an already closed tab + if (tabbedPane.editorTabs.getVisibleInfos().contains(previousSelection)) { + return previousSelection + } } val indexToSelect = computeIndexToSelect(fileBeingClosed = fileBeingClosed, fileIndex = componentIndex)