Skip to content

Commit

Permalink
GP-3544 various changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ghidra1 authored and ryanmkurtz committed Oct 3, 2023
1 parent 4b07508 commit c974d08
Show file tree
Hide file tree
Showing 21 changed files with 452 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ public Clipboard getClipboard() {
public DataTypesProvider createProvider() {

DataTypesProvider newProvider = new DataTypesProvider(this, SEARCH_PROVIDER_NAME, true);
newProvider.setIncludeDataTypeMembersInFilter(provider.includeDataMembersInSearch());
newProvider.setIncludeDataTypeMembersInFilter(provider.isIncludeDataMembersInSearch());
newProvider.setFilteringArrays(provider.isFilteringArrays());
newProvider.setFilteringPointers(provider.isFilteringPointers());
return newProvider;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
)
//@formatter:on
public class FunctionComparisonPlugin extends ProgramPlugin
implements DomainObjectListener, FunctionComparisonService {
implements DomainObjectListener, FunctionComparisonService {

static final String MENU_PULLRIGHT = "CompareFunctions";
static final String POPUP_MENU_GROUP = "CompareFunction";
Expand Down Expand Up @@ -132,7 +132,7 @@ private void runOnSwingNonBlocking(Runnable r) {
}

private FunctionComparisonProvider getFromSwingBlocking(
Supplier<FunctionComparisonProvider> comparer) {
Supplier<FunctionComparisonProvider> comparer) {

if (Swing.isSwingThread()) {
return comparer.get();
Expand All @@ -147,13 +147,13 @@ private FunctionComparisonProvider getFromSwingBlocking(

@Override
public void addFunctionComparisonProviderListener(
ComponentProviderActivationListener listener) {
ComponentProviderActivationListener listener) {
runOnSwingNonBlocking(() -> functionComparisonManager.addProviderListener(listener));
}

@Override
public void removeFunctionComparisonProviderListener(
ComponentProviderActivationListener listener) {
ComponentProviderActivationListener listener) {
runOnSwingNonBlocking(() -> functionComparisonManager.removeProviderListener(listener));
}

Expand All @@ -167,9 +167,14 @@ public void removeFunction(Function function, FunctionComparisonProvider provide
runOnSwingNonBlocking(() -> functionComparisonManager.removeFunction(function, provider));
}

@Override
public FunctionComparisonProvider createFunctionComparisonProvider() {
return getFromSwingBlocking(() -> functionComparisonManager.createProvider());
}

@Override
public FunctionComparisonProvider compareFunctions(Function source,
Function target) {
Function target) {
return getFromSwingBlocking(
() -> functionComparisonManager.compareFunctions(source, target));
}
Expand All @@ -187,7 +192,7 @@ public void compareFunctions(Set<Function> functions, FunctionComparisonProvider

@Override
public void compareFunctions(Function source, Function target,
FunctionComparisonProvider provider) {
FunctionComparisonProvider provider) {
runOnSwingNonBlocking(
() -> functionComparisonManager.compareFunctions(source, target, provider));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
* creates instances of this provider as-needed.
*/
public class FunctionComparisonProvider extends ComponentProviderAdapter
implements PopupActionProvider, FunctionComparisonModelListener {
implements PopupActionProvider, FunctionComparisonModelListener {

protected static final String HELP_TOPIC = "FunctionComparison";
protected FunctionComparisonPanel functionComparisonPanel;
Expand Down Expand Up @@ -73,7 +73,7 @@ public FunctionComparisonProvider(Plugin plugin, String name, String owner) {
* @param contextType the type of context supported by this provider; may be null
*/
public FunctionComparisonProvider(Plugin plugin, String name, String owner,
Class<?> contextType) {
Class<?> contextType) {
super(plugin.getTool(), name, owner, contextType);
this.plugin = plugin;
model = new FunctionComparisonModel();
Expand Down Expand Up @@ -264,4 +264,9 @@ private void addSpecificCodeComparisonActions() {
addLocalAction(dockingAction);
}
}

public void removeAddFunctionsAction() {
//TODO this is stupid merge multi and this into one

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ public void providerOpened(FunctionComparisonProvider provider) {
listeners.stream().forEach(l -> l.componentProviderActivated(provider));
}

public FunctionComparisonProvider createProvider() {
FunctionComparisonProvider provider = new MultiFunctionComparisonProvider(plugin);
provider.addToTool();
providers.add(provider);
provider.setVisible(true);
return provider;
}

/**
* Creates a new comparison between the given set of functions
*
Expand All @@ -69,11 +77,8 @@ public FunctionComparisonProvider compareFunctions(Set<Function> functions) {
if (functions.isEmpty()) {
return null;
}
FunctionComparisonProvider provider = new MultiFunctionComparisonProvider(plugin);
provider.addToTool();
FunctionComparisonProvider provider = createProvider();
provider.getModel().compareFunctions(functions);
providers.add(provider);
provider.setVisible(true);
return provider;
}

Expand All @@ -85,7 +90,7 @@ public FunctionComparisonProvider compareFunctions(Set<Function> functions) {
* @return the new comparison provider
*/
public FunctionComparisonProvider compareFunctions(Function source,
Function target) {
Function target) {
FunctionComparisonProvider provider = new MultiFunctionComparisonProvider(plugin);
provider.addToTool();
provider.getModel().compareFunctions(source, target);
Expand Down Expand Up @@ -118,7 +123,7 @@ public void compareFunctions(Set<Function> functions, FunctionComparisonProvider
* @param provider the provider to add the functions to
*/
public void compareFunctions(Function source, Function target,
FunctionComparisonProvider provider) {
FunctionComparisonProvider provider) {
if (provider == null) {
return;
}
Expand Down Expand Up @@ -221,4 +226,5 @@ public void domainObjectRestored(DomainObjectChangedEvent ev) {
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public class MultiFunctionComparisonPanel extends FunctionComparisonPanel {
* @param tool the active plugin tool
*/
public MultiFunctionComparisonPanel(MultiFunctionComparisonProvider provider,
PluginTool tool) {
PluginTool tool) {
super(provider, tool, null, null);

JPanel choicePanel = new JPanel(new GridLayout(1, 2));
Expand All @@ -79,6 +79,7 @@ public MultiFunctionComparisonPanel(MultiFunctionComparisonProvider provider,
// comparison panel because the name of the function/data being shown
// is already visible in the combo box
getComparisonPanels().forEach(p -> p.setShowTitles(false));
setPreferredSize(new Dimension(1200, 600));
}

/**
Expand Down Expand Up @@ -311,7 +312,7 @@ private class FunctionListCellRenderer extends DefaultListCellRenderer {

@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
boolean isSelected, boolean cellHasFocus) {

if (value == null) {
// It's possible during a close program operation to have this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@
*/
public class MultiFunctionComparisonProvider extends FunctionComparisonProvider {

private DockingAction openFunctionTableAction;

/**
* Constructor
*
* @param plugin the parent plugin
*/
public MultiFunctionComparisonProvider(Plugin plugin) {
super(plugin, "functioncomparisonprovider", plugin.getName());
protected MultiFunctionComparisonProvider(Plugin plugin) {
super(plugin, "Functions Comparison Provider", plugin.getName());
}

@Override
Expand All @@ -55,7 +57,7 @@ protected void initFunctionComparisonPanel() {
DockingAction nextFunctionAction = new NextFunctionAction(this);
DockingAction previousFunctionAction = new PreviousFunctionAction(this);
DockingAction removeFunctionsAction = new RemoveFunctionsAction(this);
DockingAction openFunctionTableAction = getOpenFunctionTableAction();
openFunctionTableAction = getOpenFunctionTableAction();
DockingAction navigateToAction = new NavigateToFunctionAction(this);

addLocalAction(nextFunctionAction);
Expand All @@ -75,4 +77,9 @@ protected void initFunctionComparisonPanel() {
protected DockingAction getOpenFunctionTableAction() {
return new OpenFunctionTableAction(tool, this);
}

@Override
public void removeAddFunctionsAction() {
removeLocalAction(openFunctionTableAction);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@
import docking.widgets.fieldpanel.internal.FieldPanelCoordinator;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.Program;
import ghidra.program.model.listing.*;
import ghidra.program.util.FunctionUtility;
import ghidra.util.*;
import ghidra.util.exception.DuplicateNameException;
Expand Down Expand Up @@ -109,7 +108,7 @@ public void actionPerformed(ActionContext context) {
* @return true if the non-focused panel is read-only
*/
protected boolean hasReadOnlyNonFocusedSide(
CodeComparisonPanel<? extends FieldPanelCoordinator> codeComparisonPanel) {
CodeComparisonPanel<? extends FieldPanelCoordinator> codeComparisonPanel) {
Function leftFunction = codeComparisonPanel.getLeftFunction();
Function rightFunction = codeComparisonPanel.getRightFunction();

Expand All @@ -134,7 +133,7 @@ protected boolean hasReadOnlyNonFocusedSide(
* @return true if the operation was successful
*/
protected boolean updateFunction(ComponentProvider provider, Function destinationFunction,
Function sourceFunction) {
Function sourceFunction) {

Program program = destinationFunction.getProgram();
int txID = program.startTransaction(ACTION_NAME);
Expand All @@ -144,7 +143,7 @@ protected boolean updateFunction(ComponentProvider provider, Function destinatio
FunctionUtility.updateFunction(destinationFunction, sourceFunction);
commit = true;
}
catch (InvalidInputException | DuplicateNameException e) {
catch (InvalidInputException | DuplicateNameException | CircularDependencyException e) {
String message = "Couldn't apply the function signature from " +
sourceFunction.getName() + " to " + destinationFunction.getName() + " @ " +
destinationFunction.getEntryPoint().toString() + ". " + e.getMessage();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@
@ServiceInfo(defaultProvider = FunctionComparisonPlugin.class)
public interface FunctionComparisonService {

/**
* Creates a comparison provider that allows comparisons between a functions.
*
* @return the new comparison provider
*/
public FunctionComparisonProvider createFunctionComparisonProvider();

/**
* Creates a comparison between a set of functions, where each function
* in the list can be compared against any other.
Expand Down Expand Up @@ -84,7 +91,7 @@ public interface FunctionComparisonService {
* @param provider the provider to add the comparisons to
*/
public void compareFunctions(Set<Function> functions,
FunctionComparisonProvider provider);
FunctionComparisonProvider provider);

/**
* Creates a comparison between two functions and adds it to a given
Expand All @@ -99,7 +106,7 @@ public void compareFunctions(Set<Function> functions,
* @param provider the provider to add the comparison to
*/
public void compareFunctions(Function source, Function target,
FunctionComparisonProvider provider);
FunctionComparisonProvider provider);

/**
* Removes a given function from all comparisons across all comparison
Expand Down Expand Up @@ -132,5 +139,5 @@ public void compareFunctions(Function source, Function target,
* @param listener the listener to remove
*/
public void removeFunctionComparisonProviderListener(
ComponentProviderActivationListener listener);
ComponentProviderActivationListener listener);
}
Loading

0 comments on commit c974d08

Please sign in to comment.