diff --git a/platform/core-api/src/com/intellij/psi/util/PsiUtilCore.java b/platform/core-api/src/com/intellij/psi/util/PsiUtilCore.java index 1f5b24660cd0..dd4ceaa5d1a4 100644 --- a/platform/core-api/src/com/intellij/psi/util/PsiUtilCore.java +++ b/platform/core-api/src/com/intellij/psi/util/PsiUtilCore.java @@ -704,4 +704,9 @@ public class PsiUtilCore { return "NULL_PSI_FILE"; } } + + @NotNull + public static SmartPsiElementPointer createSmartPsiElementPointer(@NotNull E element) { + return SmartPointerManager.getInstance(element.getProject()).createSmartPsiElementPointer(element); + } } diff --git a/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java b/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java index cd87c874ae96..3d2887c208ba 100644 --- a/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java @@ -48,6 +48,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Supplier; public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper implements CompositeSelectInTarget { private String mySubId; @@ -77,10 +78,14 @@ public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper return result; } + Supplier toSelectSupplier = toSelect instanceof PsiElement + ? PsiUtilCore.createSmartPsiElementPointer((PsiElement)toSelect)::getElement + : () -> toSelect; + ToolWindowManager windowManager = ToolWindowManager.getInstance(project); final ToolWindow projectViewToolWindow = windowManager.getToolWindow(ToolWindowId.PROJECT_VIEW); final Runnable runnable = () -> { - Runnable r = () -> projectView.selectCB(toSelect, virtualFile, requestFocus).notify(result); + Runnable r = () -> projectView.selectCB(toSelectSupplier.get(), virtualFile, requestFocus).notify(result); projectView.changeViewCB(ObjectUtils.chooseNotNull(viewId, ProjectViewPane.ID), subviewId).doWhenProcessed(r); };