我正在编写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
方法,而不会触发从源代码自动滚动。