我正在编写一个 IntelliJ IDEA 插件,我正在尝试从项目窗格导航到文件而不触发“autoscrollfromsource”功能(即使它已打开)。
我尝试暂时禁用 autoscrollfromsource (然后重新启用它),但这次尝试没有成功。
在下面的代码中,加载文件似乎需要一些时间,并且到那时 autoscrollfromsource 已经重新启用。
private void navigateWithoutAutoscrollFromSource(final ProjectViewImpl projectView, BasePsiNode<? extends PsiElement> node) {
boolean wasAutoScrollFromSource = projectView.isAutoscrollFromSource(PROJECT_PANE);
if (wasAutoScrollFromSource) {
projectView.setAutoscrollFromSource(false, PROJECT_PANE);
}
// this navigation here should NOT trigger autoscrollfromsource!!
node.navigate(true);
if (wasAutoScrollFromSource) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
projectView.setAutoscrollFromSource(true, PROJECT_PANE);
}
});
}
}
有没有更好的方法来导航到我的节点,而不触发 autoscrollfromsource?
感谢任何专业提示:)
更新 1
我将代码跟踪到 openapi 类OpenFileDescriptor
,在这里:
public void navigate(boolean requestFocus) {
if (!canNavigate()) {
throw new IllegalStateException("Navigation is not possible with null project");
}
if (!myFile.isDirectory() && navigateInEditor(myProject, requestFocus)) return;
navigateInProjectView();
}
基本上,我希望能够执行此navigate
方法,而不会从源代码触发自动滚动。