From 0bbfd42888c9548811e63060716b06ec1f9280ff Mon Sep 17 00:00:00 2001 From: Ilia Zakoulov Date: Thu, 8 Jan 2026 12:37:06 +0100 Subject: [PATCH] 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 --- .../frontend/BUILD.bazel | 1 + ...orm.ide.nonModalWelcomeScreen.frontend.iml | 1 + .../src/WelcomeScreenLeftTabListener.kt | 19 ++++++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/platform/non-modal-welcome-screen/frontend/BUILD.bazel b/platform/non-modal-welcome-screen/frontend/BUILD.bazel index a79f124d7a01..020b939e478b 100644 --- a/platform/non-modal-welcome-screen/frontend/BUILD.bazel +++ b/platform/non-modal-welcome-screen/frontend/BUILD.bazel @@ -24,6 +24,7 @@ jvm_library( "//platform/core-ui", "//platform/project/shared:project", "//fleet/rpc", + "//platform/platform-impl:ide-impl", ], plugins = ["@lib//:compose-plugin"] ) diff --git a/platform/non-modal-welcome-screen/frontend/intellij.platform.ide.nonModalWelcomeScreen.frontend.iml b/platform/non-modal-welcome-screen/frontend/intellij.platform.ide.nonModalWelcomeScreen.frontend.iml index 29addfae31f8..dc02b89bd6a7 100644 --- a/platform/non-modal-welcome-screen/frontend/intellij.platform.ide.nonModalWelcomeScreen.frontend.iml +++ b/platform/non-modal-welcome-screen/frontend/intellij.platform.ide.nonModalWelcomeScreen.frontend.iml @@ -43,5 +43,6 @@ + \ No newline at end of file diff --git a/platform/non-modal-welcome-screen/frontend/src/WelcomeScreenLeftTabListener.kt b/platform/non-modal-welcome-screen/frontend/src/WelcomeScreenLeftTabListener.kt index ccd0a82a17c9..edc34a08e3ac 100644 --- a/platform/non-modal-welcome-screen/frontend/src/WelcomeScreenLeftTabListener.kt +++ b/platform/non-modal-welcome-screen/frontend/src/WelcomeScreenLeftTabListener.kt @@ -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) + } }