From cf61c0913849704856cd75d536c99ddea07a52e6 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 13 Dec 2017 13:49:51 +0300 Subject: [PATCH] EA-110977 - PIEAE: PsiUtilCore.ensureValid use smart pointer to hold a reference to psi element --- .../core-api/src/com/intellij/psi/util/PsiUtilCore.java | 5 +++++ .../com/intellij/ide/impl/ProjectViewSelectInTarget.java | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) 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); };