mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-110977 - PIEAE: PsiUtilCore.ensureValid
use smart pointer to hold a reference to psi element
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user