From 08a37c75cb04bf195a1fc773d13c700f364adcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Tue, 1 May 2018 18:16:08 +0200 Subject: [PATCH] Avoid some unnecessary computations They're possibly expensive, eg tree traversal --- .../fxdesigner/NodeInfoPanelController.java | 7 +++++-- .../fxdesigner/SourceEditorController.java | 18 +++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java b/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java index 0c6012e1d5..1281f1c620 100644 --- a/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java +++ b/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java @@ -59,7 +59,7 @@ public class NodeInfoPanelController implements Initializable { @FXML private TreeView scopeHierarchyTreeView; private MetricEvaluator metricEvaluator = new MetricEvaluator(); - + private Node selectedNode; public NodeInfoPanelController(MainDesignerController mainController) { parent = mainController; @@ -84,9 +84,12 @@ public class NodeInfoPanelController implements Initializable { * @param node Node to inspect */ public void displayInfo(Node node) { - Objects.requireNonNull(node, "Node cannot be null"); + if (node.equals(selectedNode)) { + return; + } + ObservableList atts = getAttributes(node); xpathAttributesListView.setItems(atts); diff --git a/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/SourceEditorController.java b/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/SourceEditorController.java index fdec3e8976..84520a06fa 100644 --- a/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/SourceEditorController.java +++ b/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/SourceEditorController.java @@ -58,7 +58,7 @@ public class SourceEditorController implements Initializable, SettingsOwner { private ASTManager astManager; private TreeViewWrapper treeViewWrapper; - + private ASTTreeItem selectedTreeItem; public SourceEditorController(DesignerRoot owner, MainDesignerController mainController) { parent = mainController; @@ -165,12 +165,17 @@ public class SourceEditorController implements Initializable, SettingsOwner { highlightNodes(nodes, Collections.singleton("secondary-highlight")); } - public void focusNodeInTreeView(Node node) { - ASTTreeItem found = ((ASTTreeItem) astTreeView.getRoot()).findItem(node); - if (found != null) { - SelectionModel> selectionModel = astTreeView.getSelectionModel(); - selectionModel.select(found); + SelectionModel> selectionModel = astTreeView.getSelectionModel(); + + // node is different from the old one + if (selectedTreeItem == null && node != null + || selectedTreeItem != null && !Objects.equals(node, selectedTreeItem.getValue())) { + ASTTreeItem found = ((ASTTreeItem) astTreeView.getRoot()).findItem(node); + if (found != null) { + selectionModel.select(found); + } + astTreeView.getFocusModel().focus(selectionModel.getSelectedIndex()); if (!treeViewWrapper.isIndexVisible(selectionModel.getSelectedIndex())) { astTreeView.scrollTo(selectionModel.getSelectedIndex()); @@ -178,7 +183,6 @@ public class SourceEditorController implements Initializable, SettingsOwner { } } - private void invalidateAST(boolean error) { astTitleLabel.setText("Abstract syntax tree (" + (error ? "error" : "outdated") + ")"); }