EA-110977 - PIEAE: PsiUtilCore.ensureValid

use smart pointer to hold a reference to psi element
This commit is contained in:
Sergey Malenkov
2017-12-13 14:56:19 +03:00
parent db9cc9d99e
commit cf61c09138
2 changed files with 11 additions and 1 deletions
@@ -704,4 +704,9 @@ public class PsiUtilCore {
return "NULL_PSI_FILE";
}
}
@NotNull
public static <E extends PsiElement> SmartPsiElementPointer<E> createSmartPsiElementPointer(@NotNull E element) {
return SmartPointerManager.getInstance(element.getProject()).createSmartPsiElementPointer(element);
}
}
@@ -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<Object> 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);
};