diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/AbstractSettingsDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/AbstractSettingsDialog.java index b261da7826..1d23156cbe 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/AbstractSettingsDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/AbstractSettingsDialog.java @@ -69,6 +69,7 @@ public abstract class AbstractSettingsDialog extends DialogComponentProvider { super(title, true, false, true, false); this.settingsDefinitions = settingDefinitions; settings = new SettingsImpl(originalSettings) { + @Override public boolean isChangeAllowed(SettingsDefinition settingsDefinition) { return originalSettings == null || originalSettings.isChangeAllowed(settingsDefinition); @@ -118,7 +119,7 @@ public abstract class AbstractSettingsDialog extends DialogComponentProvider { @Override public void dispose() { - close(); + super.dispose(); settingsDefinitions = null; defaultSettings = null; settings = null; @@ -150,23 +151,23 @@ public abstract class AbstractSettingsDialog extends DialogComponentProvider { private void readHexModePreferences() { intHexModeMap = new HashMap<>(); - for (int i = 0; i < settingsDefinitions.length; i++) { - if (settingsDefinitions[i] instanceof NumberSettingsDefinition) { - String propertyName = getHexModePropertyName(settingsDefinitions[i]); + for (SettingsDefinition settingsDefinition : settingsDefinitions) { + if (settingsDefinition instanceof NumberSettingsDefinition) { + String propertyName = getHexModePropertyName(settingsDefinition); boolean hexMode = Boolean .valueOf( - Preferences.getProperty(propertyName, Boolean.FALSE.toString())); - intHexModeMap.put(settingsDefinitions[i].getName(), hexMode); + Preferences.getProperty(propertyName, Boolean.FALSE.toString())); + intHexModeMap.put(settingsDefinition.getName(), hexMode); } } } private void writeHexModePreferences() { boolean save = false; - for (int i = 0; i < settingsDefinitions.length; i++) { - if (settingsDefinitions[i] instanceof NumberSettingsDefinition) { - boolean hexMode = intHexModeMap.get(settingsDefinitions[i].getName()); - String propertyName = getHexModePropertyName(settingsDefinitions[i]); + for (SettingsDefinition settingsDefinition : settingsDefinitions) { + if (settingsDefinition instanceof NumberSettingsDefinition) { + boolean hexMode = intHexModeMap.get(settingsDefinition.getName()); + String propertyName = getHexModePropertyName(settingsDefinition); if (hexMode != Boolean .valueOf(Preferences.getProperty(propertyName, Boolean.FALSE.toString()))) { Preferences.setProperty(propertyName, Boolean.toString(hexMode)); @@ -596,7 +597,6 @@ public abstract class AbstractSettingsDialog extends DialogComponentProvider { return sign + "0x" + signedValue.toString(16); } - private class SettingsRenderer extends GTableCellRenderer { private Font originalFont; @@ -634,7 +634,7 @@ public abstract class AbstractSettingsDialog extends DialogComponentProvider { return renderer; } } - + private class NumberWrapper { final Number value; // may be null @@ -703,7 +703,7 @@ public abstract class AbstractSettingsDialog extends DialogComponentProvider { GhidraComboBox getComboBox() { return comboBox; // used for testing } - + @Override public Object getCellEditorValue() { switch (mode) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPlugin.java index 9324b20bf7..78a4c543d7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPlugin.java @@ -86,7 +86,7 @@ public class DataTypeManagerPlugin extends ProgramPlugin private static final String EXTENSIONS_PATH_PREFIX = Path.GHIDRA_HOME + "/Extensions"; - private static final String SEACH_PROVIDER_NAME = "Search DataTypes Provider"; + private static final String SEARCH_PROVIDER_NAME = "Search DataTypes Provider"; private static final int RECENTLY_USED_CACHE_SIZE = 10; private static final String STANDARD_ARCHIVE_MENU = "Standard Archive"; @@ -360,11 +360,10 @@ public class DataTypeManagerPlugin extends ProgramPlugin public DataTypesProvider createProvider() { - DataTypesProvider newProvider = new DataTypesProvider(this, SEACH_PROVIDER_NAME); + DataTypesProvider newProvider = new DataTypesProvider(this, SEARCH_PROVIDER_NAME, true); newProvider.setIncludeDataTypeMembersInFilter(provider.includeDataMembersInSearch()); newProvider.setFilteringArrays(provider.isFilteringArrays()); newProvider.setFilteringPointers(provider.isFilteringPointers()); - newProvider.setTransient(); return newProvider; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java index 4c65b8c08e..6a5ea1464f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java @@ -99,9 +99,18 @@ public class DataTypesProvider extends ComponentProviderAdapter { private boolean includeDataMembersInFilter; public DataTypesProvider(DataTypeManagerPlugin plugin, String providerName) { + this(plugin, providerName, false); + } + + public DataTypesProvider(DataTypeManagerPlugin plugin, String providerName, + boolean isTransient) { super(plugin.getTool(), providerName, plugin.getName(), DataTypesActionContext.class); this.plugin = plugin; + if (isTransient) { + setTransient(); + } + setTitle(TITLE); setIcon(new GIcon("icon.plugin.datatypes.provider")); addToToolbar(); @@ -114,11 +123,6 @@ public class DataTypesProvider extends ComponentProviderAdapter { createLocalActions(); } - @Override // overridden to open access - protected void setTransient() { - super.setTransient(); - } - /** * This creates all the actions for opening/creating data type archives. * It also creates the action for refreshing the built-in data types diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java index 5c728642e3..0d096a2594 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java @@ -71,7 +71,7 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { private AddressInput baseAddrField; // used for Bit and Byte mapped blocks private IntegerTextField schemeDestByteCountField; // used for Byte mapped blocks private IntegerTextField schemeSrcByteCountField; // used for Byte mapped blocks - + private AddBlockModel model; private GhidraComboBox comboBox; private boolean updatingInitializedRB; @@ -325,8 +325,9 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { tool.showDialog(this, tool.getComponentProvider(PluginConstants.MEMORY_MAP)); } + @Override public void dispose() { - close(); + super.dispose(); model.dispose(); } @@ -427,7 +428,7 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { } model.setBaseAddress(addr); } - + private void schemeSrcByteCountChanged() { int value = schemeSrcByteCountField.getIntValue(); model.setSchemeSrcByteCount(value); @@ -466,21 +467,21 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { baseAddrField.setAddressFactory(addrFactory); baseAddrField.setName("Source Addr"); baseAddrField.addChangeListener(ev -> baseAddressChanged()); - + JPanel schemePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - + schemeDestByteCountField = new IntegerTextField(4, 1); schemeDestByteCountField.setAllowNegativeValues(false); schemeDestByteCountField.setAllowsHexPrefix(false); schemeDestByteCountField.setDecimalMode(); schemeDestByteCountField.addChangeListener(ev -> schemeDestByteCountChanged()); - + schemeSrcByteCountField = new IntegerTextField(4, 1); schemeSrcByteCountField.setAllowNegativeValues(false); schemeSrcByteCountField.setAllowsHexPrefix(false); schemeSrcByteCountField.setDecimalMode(); schemeSrcByteCountField.addChangeListener(ev -> schemeSrcByteCountChanged()); - + schemePanel.add(schemeDestByteCountField.getComponent()); schemePanel.add(new GLabel(" : ")); schemePanel.add(schemeSrcByteCountField.getComponent()); @@ -494,10 +495,10 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { model.setBaseAddress(minAddr); panel.add(new GLabel("Source Address:")); panel.add(baseAddrField); - + panel.add(new GLabel("Mapping Ratio:")); panel.add(schemePanel); - + panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); return panel; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationDialog.java index 7b2ca2bc3c..f226370a57 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationDialog.java @@ -94,8 +94,9 @@ public class EditExternalLocationDialog extends DialogComponentProvider { /** * Dispose of this dialog. */ + @Override public void dispose() { - close(); + super.dispose(); cleanup(); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java index f27a95a6ea..9cef992fb5 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java @@ -16,7 +16,8 @@ package docking.widgets; import java.awt.Toolkit; -import java.awt.event.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.util.Arrays; import javax.swing.*; @@ -63,12 +64,7 @@ public class PasswordChangeDialog extends DialogComponentProvider { wp.add(new GLabel("Repeat Password:")); passwordField2 = new JPasswordField(16); passwordField2.setName("PASSWORD-ENTRY2-COMPONENT"); - passwordField2.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - okCallback(); - } - }); + passwordField2.addActionListener(e -> okCallback()); wp.add(passwordField2); wp.add(new GLabel()); @@ -146,8 +142,15 @@ public class PasswordChangeDialog extends DialogComponentProvider { close(); } + @Override + public void close() { + // overridden to not call dispose, since this class does special cleanup on close + closeDialog(); + } + + @Override public void dispose() { - close(); + super.dispose(); if (newPassword != null) { Arrays.fill(newPassword, ' '); newPassword = null; diff --git a/Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/DefaultClientAuthenticator.java b/Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/DefaultClientAuthenticator.java index 79b96b84a9..ff6f5ebe9a 100644 --- a/Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/DefaultClientAuthenticator.java +++ b/Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/DefaultClientAuthenticator.java @@ -91,11 +91,11 @@ public class DefaultClientAuthenticator extends PopupKeyStorePasswordProvider @Override public char[] getNewPassword(final Component parent, String serverInfo, String username) { - final PasswordChangeDialog dlg = + + PasswordChangeDialog dlg = new PasswordChangeDialog("Change Password", "Repository Server", serverInfo, username); - Runnable r = () -> DockingWindowManager.showDialog(parent, dlg); try { - SystemUtilities.runSwingNow(r); + DockingWindowManager.showDialog(parent, dlg); return dlg.getPassword(); } finally {