inspection view: auto-scroll to source navigates to target on every psi change IDEA-162758

This commit is contained in:
Dmitry Batkovich
2016-11-18 15:11:48 +03:00
parent 3ac093f721
commit fed7a4c3cd
2 changed files with 16 additions and 11 deletions
@@ -80,6 +80,7 @@ import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
@@ -211,7 +212,7 @@ public class InspectionResultsView extends JPanel implements Disposable, Occuren
myTree.repaint();
}
else {
InspectionViewPsiTreeChangeAdapter.resetTree(InspectionResultsView.this);
resetTree();
}
syncRightPanel();
}
@@ -990,6 +991,19 @@ public class InspectionResultsView extends JPanel implements Disposable, Occuren
return null;
}
public void resetTree() {
try {
myTree.setQueueUpdate(true);
final TreePath[] selectionPath = myTree.getSelectionPaths();
final List<TreePath> expandedPaths = TreeUtil.collectExpandedPaths(myTree);
((DefaultTreeModel)myTree.getModel()).reload();
TreeUtil.restoreExpandedPaths(myTree, expandedPaths);
myTree.setSelectionPaths(selectionPath);
} finally {
myTree.setQueueUpdate(false);
}
}
@Nullable
private Navigatable getSelectedNavigatable(final CommonProblemDescriptor descriptor) {
return getSelectedNavigatable(descriptor,
@@ -111,7 +111,7 @@ class InspectionViewPsiTreeChangeAdapter extends PsiTreeChangeAdapter {
if (needUpdateUI[0]) {
myAlarm.cancelAllRequests();
myAlarm.addRequest(() -> {
resetTree(myView);
myView.resetTree();
}, 100, ModalityState.NON_MODAL);
}
}
@@ -168,15 +168,6 @@ class InspectionViewPsiTreeChangeAdapter extends PsiTreeChangeAdapter {
processEventFileOrDir(event, false);
}
public static void resetTree(@NotNull InspectionResultsView view) {
final InspectionTree tree = view.getTree();
final TreePath[] selectionPath = tree.getSelectionPaths();
final List<TreePath> expandedPaths = TreeUtil.collectExpandedPaths(tree);
((DefaultTreeModel)tree.getModel()).reload();
TreeUtil.restoreExpandedPaths(tree, expandedPaths);
tree.setSelectionPaths(selectionPath);
}
private void processEventFileOrDir(@NotNull PsiTreeChangeEvent event, boolean eagerEvaluateFiles) {
final PsiFile file = event.getFile();
if (file != null) {