From 1fa2bd79793348429e4a0487eed4ea87143a58ea Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Wed, 12 Jun 2019 13:43:59 -0400 Subject: [PATCH] Tests - fixed for timing issue with tree nodes --- .../datamgr/actions/CreatePointerAction.java | 5 ++ .../datamgr/actions/PackDataTypeAction.java | 82 ++++++++++--------- .../actions/PackSizeDataTypeAction.java | 10 +-- 3 files changed, 53 insertions(+), 44 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreatePointerAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreatePointerAction.java index 34440b5a0a..e9aa804163 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreatePointerAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreatePointerAction.java @@ -94,6 +94,11 @@ public class CreatePointerAction extends DockingAction { } ArchiveNode archiveNode = node.getArchiveNode(); + if (archiveNode == null) { + // this can happen as the tree is changing + return false; + } + boolean enabled = archiveNode.isModifiable(); if (archiveNode instanceof BuiltInArchiveNode) { // these will be put into the program archive diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackDataTypeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackDataTypeAction.java index ae84cc87d2..9c08a29697 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackDataTypeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackDataTypeAction.java @@ -32,46 +32,47 @@ public class PackDataTypeAction extends DockingAction { private DataTypeManagerPlugin plugin; - public PackDataTypeAction(DataTypeManagerPlugin plugin) { + public PackDataTypeAction(DataTypeManagerPlugin plugin) { super("Pack Data Type", plugin.getName()); this.plugin = plugin; - setPopupMenuData(new MenuData(new String[] {"Pack"}, "Edit")); + setPopupMenuData(new MenuData(new String[] { "Pack" }, "Edit")); } - @Override - public boolean isEnabledForContext(ActionContext context) { - Object contextObject = context.getContextObject(); - if (!(contextObject instanceof GTree)) { - return false; - } - GTree gTree = (GTree)contextObject; - TreePath[] selectionPaths = gTree.getSelectionPaths(); - if (selectionPaths.length != 1) { - return false; - } - DataTypeTreeNode node = (DataTypeTreeNode)selectionPaths[0].getLastPathComponent(); + @Override + public boolean isEnabledForContext(ActionContext context) { + Object contextObject = context.getContextObject(); + if (!(contextObject instanceof GTree)) { + return false; + } + GTree gTree = (GTree) contextObject; + TreePath[] selectionPaths = gTree.getSelectionPaths(); + if (selectionPaths.length != 1) { + return false; + } + DataTypeTreeNode node = (DataTypeTreeNode) selectionPaths[0].getLastPathComponent(); - if (!(node instanceof DataTypeNode)) { - return false; - } - setEnabled(node.getArchiveNode().isModifiable()); - return true; - } + if (!(node instanceof DataTypeNode)) { + return false; + } + setEnabled(node.isModifiable()); + return true; + } - @Override - public void actionPerformed(ActionContext context) { - GTree gTree = (GTree)context.getContextObject(); - TreePath[] selectionPaths = gTree.getSelectionPaths(); - if (selectionPaths.length != 1) { - Msg.error(this, "Pack is only allowed on an individual data type."); - return; - } - TreePath treePath = selectionPaths[0]; - final DataTypeNode dataTypeNode = (DataTypeNode) treePath.getLastPathComponent(); - DataType dataType = dataTypeNode.getDataType(); - DataTypeManager dataTypeManager = dataType.getDataTypeManager(); + @Override + public void actionPerformed(ActionContext context) { + GTree gTree = (GTree) context.getContextObject(); + TreePath[] selectionPaths = gTree.getSelectionPaths(); + if (selectionPaths.length != 1) { + Msg.error(this, "Pack is only allowed on an individual data type."); + return; + } + TreePath treePath = selectionPaths[0]; + final DataTypeNode dataTypeNode = (DataTypeNode) treePath.getLastPathComponent(); + DataType dataType = dataTypeNode.getDataType(); + DataTypeManager dataTypeManager = dataType.getDataTypeManager(); if (dataTypeManager == null) { - Msg.error(this, "Can't pack data type "+dataType.getName()+" without a data type manager."); + Msg.error(this, + "Can't pack data type " + dataType.getName() + " without a data type manager."); return; } @@ -80,23 +81,26 @@ public class PackDataTypeAction extends DockingAction { try { // start a transaction transactionID = dataTypeManager.startTransaction("pack of " + dataType.getName()); - packDataType( dataType ); + packDataType(dataType); commit = true; - } catch (InvalidInputException iie) { + } + catch (InvalidInputException iie) { // TODO Auto-generated catch block iie.printStackTrace(); - } finally { + } + finally { // commit the changes dataTypeManager.endTransaction(transactionID, commit); } - } + } private void packDataType(DataType dataType) throws InvalidInputException { if (!(dataType instanceof Structure)) { - Msg.error(this, "Can't pack data type "+dataType.getName()+". It's not a structure."); + Msg.error(this, + "Can't pack data type " + dataType.getName() + ". It's not a structure."); return; } - ((Structure)dataType).pack(1); + ((Structure) dataType).pack(1); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackSizeDataTypeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackSizeDataTypeAction.java index 70ca45fb02..78a0a0c99a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackSizeDataTypeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/PackSizeDataTypeAction.java @@ -55,7 +55,7 @@ public class PackSizeDataTypeAction extends DockingAction { if (!(node instanceof DataTypeNode)) { return false; } - setEnabled(node.getArchiveNode().isModifiable()); + setEnabled(node.isModifiable()); return true; } @@ -68,8 +68,8 @@ public class PackSizeDataTypeAction extends DockingAction { DataType dataType = dataTypeNode.getDataType(); DataTypeManager dataTypeManager = dataType.getDataTypeManager(); if (dataTypeManager == null) { - Msg.error(this, "Can't pack data type " + dataType.getName() + - " without a data type manager."); + Msg.error(this, + "Can't pack data type " + dataType.getName() + " without a data type manager."); return; } @@ -100,8 +100,8 @@ public class PackSizeDataTypeAction extends DockingAction { private void packDataType(DataType dataType, int packSize) throws InvalidInputException { if (!(dataType instanceof Structure)) { - Msg.error(this, "Can't pack data type " + dataType.getName() + - ". It's not a structure."); + Msg.error(this, + "Can't pack data type " + dataType.getName() + ". It's not a structure."); return; } ((Structure) dataType).pack(packSize);