mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +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,13 +323,15 @@ public class ProgramTreePlugin extends ProgramPlugin
|
|||
//
|
||||
// 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
|
||||
// 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<>();
|
||||
String[] orderedTreeNames = currentProgram.getListing().getTreeNames();
|
||||
for (String treeName : orderedTreeNames) {
|
||||
TreeViewProvider provider = providerMap.get(treeName);
|
||||
list.add(provider);
|
||||
if (provider != null) { // Provider will be null if this tree is not open in the view
|
||||
list.add(provider);
|
||||
}
|
||||
}
|
||||
|
||||
componentProvider.treeViewsRestored(list);
|
||||
|
|
|
@ -425,6 +425,32 @@ public class ViewManagerPluginTest extends AbstractGhidraHeadedIntegrationTest {
|
|||
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")
|
||||
private JTextField findTextField(Container container) {
|
||||
Component[] c = container.getComponents();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue