PY-86523: Check if contentManager is initialized before trying to change view.

This method might be called too early causing NPE inside `getContentManager`.

Space-RevId: 74e62c8d1f413422512a4f676e8b9086e04f2b81

GitOrigin-RevId: 638e0e4b433d365acf81c9853f0f93805f1db612
This commit is contained in:
Ilia Zakoulov
2026-01-27 18:22:28 +00:00
committed by intellij-monorepo-bot
parent 5b621729f3
commit 0bbfd42888
3 changed files with 18 additions and 3 deletions
@@ -24,6 +24,7 @@ jvm_library(
"//platform/core-ui",
"//platform/project/shared:project",
"//fleet/rpc",
"//platform/platform-impl:ide-impl",
],
plugins = ["@lib//:compose-plugin"]
)
@@ -43,5 +43,6 @@
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="module" module-name="intellij.platform.project" />
<orderEntry type="module" module-name="fleet.rpc" />
<orderEntry type="module" module-name="intellij.platform.ide.impl" />
</component>
</module>
@@ -5,8 +5,11 @@ import com.intellij.ide.projectView.impl.ProjectViewImpl
import com.intellij.ide.projectView.impl.ProjectViewPane
import com.intellij.openapi.fileEditor.FileEditorManagerEvent
import com.intellij.openapi.fileEditor.FileEditorManagerListener
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry
import com.intellij.platform.ide.nonModalWelcomeScreen.leftPanel.WelcomeScreenLeftPanel.Companion.ID
import com.intellij.openapi.wm.ToolWindowId
import com.intellij.openapi.wm.ToolWindowManager
import com.intellij.platform.ide.nonModalWelcomeScreen.leftPanel.WelcomeScreenLeftPanel
import com.intellij.platform.ide.nonModalWelcomeScreen.rightTab.WelcomeScreenRightTabVirtualFile
internal class WelcomeScreenLeftTabListener: FileEditorManagerListener {
@@ -18,10 +21,20 @@ internal class WelcomeScreenLeftTabListener: FileEditorManagerListener {
val isChangedFromWelcome = event.oldFile?.fileType is WelcomeScreenRightTabVirtualFile.WelcomeScreenFileType
val project = event.manager.project
if (isChangedToWelcome) {
ProjectViewImpl.getInstance(project).changeView(ID)
safeChangeView(project, WelcomeScreenLeftPanel.ID)
}
else if (isChangedFromWelcome) {
ProjectViewImpl.getInstance(project).changeView(ProjectViewPane.ID)
safeChangeView(project, ProjectViewPane.ID)
}
}
private fun safeChangeView(project: Project, viewId: String) {
val canChangeView = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.PROJECT_VIEW)?.contentManagerIfCreated != null
if (!canChangeView) {
// `ProjectViewImpl.changeView` expects `contentManager` to be not null.
return
}
ProjectViewImpl.getInstance(project).changeView(viewId)
}
}