2

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

OpenFileDescriptorここで、コードを openapi クラスまでトレースします。

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基本的に、ソースからの自動スクロールをトリガーせずに、このメソッドを実行できるようにしたいと考えています。

4

1 に答える 1