mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
Merge remote-tracking branch 'origin/GP-5279_ghintern_programtree_npe--SQUASHED' into Ghidra_11.3
This commit is contained in:
commit
0084e66f27
2 changed files with 30 additions and 2 deletions
|
@ -323,14 +323,16 @@ public class ProgramTreePlugin extends ProgramPlugin
|
||||||
//
|
//
|
||||||
// Update low-level component cache. We want to maintain the order of the tree views so
|
// Update low-level component cache. We want to maintain the order of the tree views so
|
||||||
// that the UI does not move around on the user. Use the view names as they are stored in
|
// that the UI does not move around on the user. Use the view names as they are stored in
|
||||||
// the program to provide a consistent order.
|
// the program to provide a consistent order. Do not open trees the user has closed.
|
||||||
//
|
//
|
||||||
List<TreeViewProvider> list = new ArrayList<>();
|
List<TreeViewProvider> list = new ArrayList<>();
|
||||||
String[] orderedTreeNames = currentProgram.getListing().getTreeNames();
|
String[] orderedTreeNames = currentProgram.getListing().getTreeNames();
|
||||||
for (String treeName : orderedTreeNames) {
|
for (String treeName : orderedTreeNames) {
|
||||||
TreeViewProvider provider = providerMap.get(treeName);
|
TreeViewProvider provider = providerMap.get(treeName);
|
||||||
|
if (provider != null) { // Provider will be null if this tree is not open in the view
|
||||||
list.add(provider);
|
list.add(provider);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
componentProvider.treeViewsRestored(list);
|
componentProvider.treeViewsRestored(list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -425,6 +425,32 @@ public class ViewManagerPluginTest extends AbstractGhidraHeadedIntegrationTest {
|
||||||
assertTrue(provider.getCurrentView().hasSameAddresses(vps.getCurrentView()));
|
assertTrue(provider.getCurrentView().hasSameAddresses(vps.getCurrentView()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCloseSaveRestoreState() throws Exception {
|
||||||
|
//
|
||||||
|
// Test that we can close one of the program's trees and have the close correctly persist
|
||||||
|
// when saved and restored. This happens when a user closes a tree, then changes between
|
||||||
|
// program tabs.
|
||||||
|
//
|
||||||
|
final DockingActionIf closeAction = getAction(plugin, "Close Tree View");
|
||||||
|
setCurrentViewProvider(DEFAULT_TREE_NAME);
|
||||||
|
performAction(closeAction);
|
||||||
|
|
||||||
|
setCurrentViewProvider("Main Tree");
|
||||||
|
AddressSetView set = provider.getCurrentView();
|
||||||
|
|
||||||
|
env.saveRestoreToolState();
|
||||||
|
|
||||||
|
String[] treeNames = program.getListing().getTreeNames();
|
||||||
|
assertEquals(treeNames.length - 1, tabbedPane.getTabCount());
|
||||||
|
|
||||||
|
ViewProviderService vps = provider.getCurrentViewProvider();
|
||||||
|
assertEquals("Main Tree", vps.getViewName());
|
||||||
|
assertTrue(set.hasSameAddresses(provider.getCurrentView()));
|
||||||
|
assertTrue(set.hasSameAddresses(cb.getView()));
|
||||||
|
assertTrue(provider.getCurrentView().hasSameAddresses(vps.getCurrentView()));
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private JTextField findTextField(Container container) {
|
private JTextField findTextField(Container container) {
|
||||||
Component[] c = container.getComponents();
|
Component[] c = container.getComponents();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue