Merge remote-tracking branch 'origin/GP-4664_ghidragon_consolidating_function_compare_code--SQUASHED'

This commit is contained in:
Ryan Kurtz 2024-06-07 06:13:59 -04:00
commit 9840eee937
84 changed files with 169 additions and 568 deletions

View File

@ -25,8 +25,8 @@ import generic.lsh.vector.*;
import ghidra.app.decompiler.DecompileException;
import ghidra.app.script.GhidraScript;
import ghidra.app.services.FunctionComparisonService;
import ghidra.app.services.MatchedFunctionComparisonModel;
import ghidra.app.tablechooser.*;
import ghidra.features.base.codecompare.model.MatchedFunctionComparisonModel;
import ghidra.features.bsim.query.*;
import ghidra.features.bsim.query.client.Configuration;
import ghidra.features.bsim.query.description.FunctionDescription;

View File

@ -36,6 +36,7 @@ import docking.widgets.table.RowObjectTableModel;
import generic.lsh.vector.LSHVectorFactory;
import generic.theme.GIcon;
import ghidra.app.services.*;
import ghidra.features.base.codecompare.model.MatchedFunctionComparisonModel;
import ghidra.features.bsim.gui.BSimSearchPlugin;
import ghidra.features.bsim.gui.filters.BSimFilterType;
import ghidra.features.bsim.gui.filters.Md5BSimFilterType;

View File

@ -22,6 +22,7 @@ import java.awt.event.ItemListener;
import javax.swing.*;
import docking.widgets.EmptyBorderButton;
import docking.widgets.TitledPanel;
import docking.widgets.button.GRadioButton;
import docking.widgets.fieldpanel.FieldPanel;
import docking.widgets.fieldpanel.internal.FieldPanelCoordinator;
@ -38,7 +39,6 @@ import ghidra.app.util.viewer.format.FormatManager;
import ghidra.app.util.viewer.listingpanel.*;
import ghidra.app.util.viewer.multilisting.AddressTranslator;
import ghidra.app.util.viewer.multilisting.MultiListingLayoutModel;
import ghidra.app.util.viewer.util.TitledPanel;
import ghidra.framework.data.DomainObjectMergeManager;
import ghidra.framework.model.DomainObjectListener;
import ghidra.framework.options.ToolOptions;

View File

@ -24,6 +24,7 @@ import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import docking.widgets.EmptyBorderButton;
import docking.widgets.TitledPanel;
import docking.widgets.checkbox.GCheckBox;
import docking.widgets.fieldpanel.FieldPanel;
import docking.widgets.fieldpanel.internal.FieldPanelCoordinator;
@ -41,7 +42,6 @@ import ghidra.app.util.viewer.listingpanel.*;
import ghidra.app.util.viewer.multilisting.AddressTranslator;
import ghidra.app.util.viewer.multilisting.MultiListingLayoutModel;
import ghidra.app.util.viewer.util.AddressIndexMap;
import ghidra.app.util.viewer.util.TitledPanel;
import ghidra.framework.model.DomainObjectListener;
import ghidra.framework.options.ToolOptions;
import ghidra.framework.plugintool.PluginTool;

View File

@ -20,8 +20,8 @@ import java.awt.Color;
import javax.swing.*;
import docking.widgets.TitledPanel;
import generic.theme.GColor;
import ghidra.app.util.viewer.util.TitledPanel;
public class ListingPanelContainer extends JPanel {

View File

@ -17,7 +17,7 @@ package ghidra.app.plugin.core.functioncompare.actions;
import docking.ActionContext;
import docking.action.DockingAction;
import ghidra.app.util.viewer.util.CodeComparisonActionContext;
import ghidra.features.base.codecompare.panel.CodeComparisonActionContext;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.Program;
import ghidra.util.Msg;

View File

@ -17,21 +17,19 @@ package ghidra.app.services;
import java.util.Collection;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonPlugin;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonProvider;
import ghidra.framework.plugintool.ServiceInfo;
import ghidra.features.base.codecompare.model.FunctionComparisonModel;
import ghidra.features.base.codecompare.model.MatchedFunctionComparisonModel;
import ghidra.program.model.listing.Function;
import utility.function.Callback;
/**
* Service interface to create comparisons between functions which will be displayed
* side-by-side in a {@link FunctionComparisonProvider}. Each side in the
* side-by-side in a function comparison window. Each side in the
* display will allow the user to select one or more functions
*
* <p>Concurrent usage: All work performed by this service will be done asynchronously on the
* Swing thread.
*/
@ServiceInfo(defaultProvider = FunctionComparisonPlugin.class)
public interface FunctionComparisonService {
/**

View File

@ -1,181 +0,0 @@
/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
import ghidra.app.nav.Navigatable;
import ghidra.app.services.*;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressSetView;
import ghidra.program.model.listing.Program;
import ghidra.program.model.symbol.ExternalLocation;
import ghidra.program.util.ProgramLocation;
import ghidra.util.datastruct.Duo.Side;
import ghidra.util.task.TaskMonitor;
/**
* This is a GoToService for a dual listing panel. It allows the goTo to occur relative to the
* left or right listing panel of a dual listing panel, since the left and right sides can be
* displaying totally different addresses.
*/
class DualListingGoToService implements GoToService {
private ListingCodeComparisonPanel dualListing;
private Side side;
private GoToOverrideService overrideService;
private GoToService goToService;
/**
* Constructs a goTo service for a dual listing panel.
* @param goToService the GoToService that this overrides and that can be used when the
* GoToService methods don't pertain specifically to the left or right listing panel.
* @param dualListing the dual listing panel
* @param side the LEFT or RIGHT side
*/
DualListingGoToService(GoToService goToService, ListingCodeComparisonPanel dualListing,
Side side) {
this.goToService = goToService;
this.dualListing = dualListing;
this.side = side;
}
@Override
public GoToOverrideService getOverrideService() {
return overrideService;
}
@Override
public boolean goTo(ProgramLocation loc) {
return dualGoTo(loc);
}
@Override
public boolean goTo(Navigatable navigatable, Program program, Address address,
Address refAddress) {
return dualGoTo(new ProgramLocation(program, address));
}
@Override
public boolean goTo(ProgramLocation loc, Program program) {
return dualGoTo(loc);
}
@Override
public boolean goTo(Navigatable navigatable, ProgramLocation loc, Program program) {
return dualGoTo(loc);
}
@Override
public boolean goTo(Navigatable navigatable, Address goToAddress) {
return dualGoTo(goToAddress);
}
/**
* Checks the address to make sure the listing won't navigate outside the addresses
* it currently has loaded. If it is not a valid address it will set a status message
* on the dual listing.
* @param addr the address to check
* @return true if the address is valid for navigation.
*/
private boolean validateAddress(Address addr) {
if (addr == null) {
return false;
}
AddressSetView addresses = dualListing.getAddresses(side);
if (!addresses.contains(addr)) {
dualListing.setStatusInfo(
"\"" + addr.toString() + "\" is outside the current listing's view.");
return false;
}
return true;
}
private boolean dualGoTo(ProgramLocation loc) {
if (loc == null) {
return false;
}
// Only go if the location address is in the listing's current address set.
if (!validateAddress(loc.getAddress())) {
return false;
}
ListingPanel listingPanel = dualListing.getListingPanel(side);
return listingPanel.goTo(loc);
}
private boolean dualGoTo(Address addr) {
// Only go if the address is in the listing's current address set.
if (!validateAddress(addr)) {
return false;
}
ListingPanel listingPanel = dualListing.getListingPanel(side);
return listingPanel.goTo(addr);
}
@Override
public boolean goTo(Address currentAddress, Address goToAddress) {
return dualGoTo(goToAddress);
}
@Override
public boolean goTo(Address goToAddress) {
return dualGoTo(goToAddress);
}
@Override
public boolean goTo(Address goToAddress, Program program) {
return dualGoTo(goToAddress);
}
@Override
public boolean goToExternalLocation(ExternalLocation extLoc, boolean checkNavigationOption) {
throw new UnsupportedOperationException(
"Connot Go To an external address from a dual listing view.");
}
@Override
public boolean goToExternalLocation(Navigatable navigatable, ExternalLocation extLoc,
boolean checkNavigationOption) {
throw new UnsupportedOperationException(
"Connot Go To an external address from a dual listing view.");
}
@Override
public boolean goToQuery(Address fromAddr, QueryData queryData, GoToServiceListener listener,
TaskMonitor monitor) {
throw new UnsupportedOperationException(
"Go To Address or Label is not allowed in a dual listing view.");
}
@Override
public boolean goToQuery(Navigatable navigatable, Address fromAddr, QueryData queryData,
GoToServiceListener listener, TaskMonitor monitor) {
throw new UnsupportedOperationException(
"Go To Address or Label is not allowed in a dual listing view.");
}
@Override
public void setOverrideService(GoToOverrideService override) {
overrideService = override;
}
@Override
public Navigatable getDefaultNavigatable() {
return goToService.getDefaultNavigatable();
}
}

View File

@ -1,66 +0,0 @@
/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
import ghidra.app.services.GoToService;
import ghidra.framework.plugintool.ServiceProvider;
import ghidra.framework.plugintool.util.ServiceListener;
import ghidra.util.datastruct.Duo.Side;
/**
* This provides services, but overrides and implements its own goTo for one of the listing
* panels in a dual listing code comparison panel.
* If a goTo service is requested, this provides a goTo service that limits where you can go.
* It constrains the goTo to addresses that are currently in the indicated listing panel of
* the dual listing code comparison panel.
*/
class DualListingServiceProvider implements ServiceProvider {
private ServiceProvider serviceProvider;
private DualListingGoToService dualListingGoToService;
/**
* Constructor for a DualListingServiceProvider.
* @param serviceProvider the service provider to use for acquiring services other than goTo.
* @param panel the dual listing code comparison panel.
* @param side LEFT or RIGHT
*/
DualListingServiceProvider(ServiceProvider serviceProvider, ListingCodeComparisonPanel panel,
Side side) {
this.serviceProvider = serviceProvider;
GoToService goToService = serviceProvider.getService(GoToService.class);
this.dualListingGoToService = new DualListingGoToService(goToService, panel, side);
}
@Override
public void addServiceListener(ServiceListener listener) {
serviceProvider.addServiceListener(listener);
}
@Override
public <T> T getService(Class<T> serviceClass) {
if (serviceClass == GoToService.class) {
return serviceClass.cast(dualListingGoToService);
}
return serviceProvider.getService(serviceClass);
}
@Override
public void removeServiceListener(ServiceListener listener) {
serviceProvider.removeServiceListener(listener);
}
}

View File

@ -1,37 +0,0 @@
/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
import java.awt.Rectangle;
import ghidra.program.model.address.Address;
import ghidra.program.model.mem.MemoryBlock;
public interface AddressPixelMap {
public void createMapping(int width);
public Address getAddress(int pixel);
public int getPixel(Address address);
public MemoryBlock[] getBlocks();
public Rectangle getBlockPosition(MemoryBlock memoryBlock);
public void clear();
}

View File

@ -1,122 +0,0 @@
/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
import java.awt.Rectangle;
import ghidra.program.model.address.Address;
import ghidra.program.model.listing.Program;
import ghidra.program.model.mem.MemoryBlock;
public class MemoryBlockMap implements AddressPixelMap {
private Program program;
private MemoryBlock[] blocks;
private float addressesPerPixel;
private int[] pixels;
public MemoryBlockMap(Program program) {
this.program = program;
}
@Override
public void createMapping(int width) {
if (width <= 0) {
return;
}
blocks = includeBlocks();
pixels = new int[blocks.length];
long totalSize = 0;
for (MemoryBlock block : blocks) {
totalSize += block.getSize();
}
addressesPerPixel = (float) totalSize / (float) width;
for (int i = 0; i < blocks.length; i++) {
pixels[i] = Math.round(blocks[i].getSize() / addressesPerPixel);
}
}
protected MemoryBlock[] includeBlocks() {
return program.getMemory().getBlocks();
}
@Override
public Address getAddress(int pixel) {
if (pixels == null) {
return null;
}
try {
int curPos = 0;
for (int i = 0; i < pixels.length; i++) {
int curSize = pixels[i];
if (curPos + curSize > pixel) {
return blocks[i].getStart().add(
Math.round((pixel - curPos) * addressesPerPixel));
}
curPos += curSize;
}
}
catch (Exception e) {
}
return null;
}
@Override
public int getPixel(Address address) {
if (address == null || pixels == null || blocks == null) {
return -1;
}
int curPixel = 0;
for (int i = 0; i < blocks.length; i++) {
MemoryBlock block = blocks[i];
if (block.contains(address)) {
long offset = address.subtract(block.getStart());
return curPixel + Math.round(offset / addressesPerPixel);
}
curPixel += pixels[i];
}
return -1;
}
@Override
public MemoryBlock[] getBlocks() {
return blocks;
}
@Override
public Rectangle getBlockPosition(MemoryBlock block) {
int x = 0;
for (int i = 0; i < blocks.length; i++) {
if (block == blocks[i]) {
return new Rectangle(x, 0, pixels[i], 0);
}
x += pixels[i];
}
return null;
}
@Override
public void clear() {
blocks = null;
pixels = null;
}
}

View File

@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import static ghidra.util.datastruct.Duo.Side.*;
import ghidra.app.util.viewer.util.ComparisonData;
import ghidra.features.base.codecompare.panel.ComparisonData;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressSetView;
import ghidra.program.model.listing.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import java.awt.Color;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import static ghidra.util.datastruct.Duo.Side.*;
@ -36,8 +36,9 @@ import generic.theme.GIcon;
import ghidra.app.plugin.core.functioncompare.actions.*;
import ghidra.app.util.ListingHighlightProvider;
import ghidra.app.util.viewer.format.*;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext;
import ghidra.app.util.viewer.listingpanel.*;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.base.codecompare.panel.CodeComparisonPanelActionContext;
import ghidra.framework.options.*;
import ghidra.framework.plugintool.PluginTool;
import ghidra.program.model.address.*;
@ -250,7 +251,7 @@ public class ListingCodeComparisonPanel
public ActionContext getActionContext(ComponentProvider provider, MouseEvent event) {
if (event == null) {
DualListingActionContext context = new DualListingActionContext(provider, this);
ListingComparisonActionContext context = new ListingComparisonActionContext(provider, this);
return context;
}
@ -273,7 +274,7 @@ public class ListingCodeComparisonPanel
return new DefaultActionContext(provider).setContextObject(fieldHeaderLocation);
}
return new DualListingActionContext(provider, this);
return new ListingComparisonActionContext(provider, this);
}
/**

View File

@ -13,15 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import docking.ComponentProvider;
import ghidra.app.util.viewer.util.CodeComparisonActionContext;
import ghidra.features.base.codecompare.panel.CodeComparisonActionContext;
/**
* Action context for a ListingCodeComparisonPanel.
*/
public class DualListingActionContext extends CodeComparisonActionContext {
public class ListingComparisonActionContext extends CodeComparisonActionContext {
private ListingCodeComparisonPanel codeComparisonPanel = null;
@ -30,7 +30,7 @@ public class DualListingActionContext extends CodeComparisonActionContext {
* @param provider the provider that uses this action context.
* @param panel the ListingCodeComparisonPanel that generated this context
*/
public DualListingActionContext(ComponentProvider provider, ListingCodeComparisonPanel panel) {
public ListingComparisonActionContext(ComponentProvider provider, ListingCodeComparisonPanel panel) {
super(provider, panel, panel.getActiveListingPanel().getFieldPanel());
this.codeComparisonPanel = panel;
}

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import static ghidra.util.datastruct.Duo.Side.*;
@ -23,6 +23,7 @@ import docking.widgets.fieldpanel.FieldPanel;
import docking.widgets.fieldpanel.internal.LayoutLockedFieldPanelCoordinator;
import docking.widgets.fieldpanel.internal.LineLockedFieldPanelCoordinator;
import docking.widgets.fieldpanel.support.ViewerPosition;
import ghidra.app.util.viewer.listingpanel.ProgramLocationTranslator;
import ghidra.app.util.viewer.util.AddressIndexMap;
import ghidra.program.model.address.Address;
import ghidra.program.util.ListingAddressCorrelation;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import java.util.Arrays;
import java.util.List;
@ -89,7 +89,7 @@ public class ListingDiffActionManager {
toggleIgnoreRegisterNamesAction.setEnabled(isShowing);
}
class ToggleIgnoreByteDiffsAction extends DualListingToggleDockingAction {
class ToggleIgnoreByteDiffsAction extends ListingDisplayToggleAction {
ToggleIgnoreByteDiffsAction() {
super("Toggle Ignore Byte Diffs", "DualListing");
@ -117,7 +117,7 @@ public class ListingDiffActionManager {
}
}
class ToggleIgnoreConstantsAction extends DualListingToggleDockingAction {
class ToggleIgnoreConstantsAction extends ListingDisplayToggleAction {
ToggleIgnoreConstantsAction() {
super("Toggle Ignore Constants", "DualListing");
@ -146,7 +146,7 @@ public class ListingDiffActionManager {
}
}
class ToggleIgnoreRegisterNamesAction extends DualListingToggleDockingAction {
class ToggleIgnoreRegisterNamesAction extends ListingDisplayToggleAction {
ToggleIgnoreRegisterNamesAction() {
super("Toggle Ignore Register Names", "DualListing");

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
/**
* Interface defining a listener that gets notified when the ListingDiff's set of differences

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import java.awt.Color;
import java.util.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import static ghidra.GhidraOptions.*;
@ -30,6 +30,7 @@ import ghidra.app.plugin.core.marker.MarkerManager;
import ghidra.app.services.*;
import ghidra.app.util.ListingHighlightProvider;
import ghidra.app.util.viewer.format.FormatManager;
import ghidra.app.util.viewer.listingpanel.*;
import ghidra.app.util.viewer.util.AddressIndexMap;
import ghidra.app.util.viewer.util.FieldNavigator;
import ghidra.framework.options.ToolOptions;

View File

@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import docking.DockingWindowManager;
import ghidra.app.nav.Navigatable;
import ghidra.app.services.*;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.app.util.viewer.util.AddressIndexMap;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressSetView;
@ -28,8 +29,8 @@ import ghidra.util.Msg;
import ghidra.util.task.TaskMonitor;
/**
* This is a GoToService for a dual listing panel. It allows the goTo to occur relative to the
* left or right listing panel of a dual listing panel, since the left and right sides can be
* This is a GoToService for a listing code compare panel. It allows the goTo to occur relative to
* the left or right listing panel of a dual listing panel, since the left and right sides can be
* displaying totally different addresses.
*/
class ListingDisplayGoToService implements GoToService {
@ -126,7 +127,7 @@ class ListingDisplayGoToService implements GoToService {
@Override
public Navigatable getDefaultNavigatable() {
return new DualListingNavigator(listingPanel, this);
return new ListingDisplayNavigator(listingPanel, this);
}
private boolean doGoTo(Address addr) {

View File

@ -13,13 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import javax.swing.Icon;
import ghidra.app.nav.*;
import ghidra.app.services.GoToService;
import ghidra.app.util.ListingHighlightProvider;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.program.model.listing.Program;
import ghidra.program.util.ProgramLocation;
import ghidra.program.util.ProgramSelection;
@ -28,7 +29,7 @@ import ghidra.util.UniversalIdGenerator;
/**
* Navigator for the listings contained in a ListingCodeComparisonPanel.
*/
class DualListingNavigator implements Navigatable {
class ListingDisplayNavigator implements Navigatable {
private final ListingPanel listingPanel;
private long id;
@ -40,7 +41,7 @@ class DualListingNavigator implements Navigatable {
* @param goToService which side LEFT or RIGHT
* false means it's for the right side listing.
*/
DualListingNavigator(ListingPanel listingPanel, GoToService goToService) {
ListingDisplayNavigator(ListingPanel listingPanel, GoToService goToService) {
this.listingPanel = listingPanel;
this.goToService = goToService;

View File

@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.listingpanel;
package ghidra.features.base.codecompare.listing;
import docking.ActionContext;
import docking.action.ToggleDockingAction;
import docking.widgets.fieldpanel.FieldPanel;
/**
* Class that dual listing toggle actions should extend.
* Class that listing display toggle actions should extend.
*/
abstract class DualListingToggleDockingAction extends ToggleDockingAction {
abstract class ListingDisplayToggleAction extends ToggleDockingAction {
/**
* Constructor that creates a toggle action for a dual listing.
@ -30,7 +30,7 @@ abstract class DualListingToggleDockingAction extends ToggleDockingAction {
* @param owner the owner of this action
* @param supportsKeyBindings true if this action's key binding should be managed
*/
public DualListingToggleDockingAction(String name, String owner, boolean supportsKeyBindings) {
public ListingDisplayToggleAction(String name, String owner, boolean supportsKeyBindings) {
super(name, owner, supportsKeyBindings);
}
@ -39,7 +39,7 @@ abstract class DualListingToggleDockingAction extends ToggleDockingAction {
* @param name the name for this action
* @param owner the owner of this action
*/
public DualListingToggleDockingAction(String name, String owner) {
public ListingDisplayToggleAction(String name, String owner) {
super(name, owner);
}

View File

@ -13,11 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.services;
package ghidra.features.base.codecompare.model;
import java.util.*;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonModelListener;
import ghidra.program.model.listing.Function;
import ghidra.util.datastruct.Duo;
import ghidra.util.datastruct.Duo.Side;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.services;
package ghidra.features.base.codecompare.model;
import static ghidra.util.datastruct.Duo.Side.*;

View File

@ -16,25 +16,27 @@
/**
*
*/
package ghidra.app.services;
package ghidra.features.base.codecompare.model;
import java.util.Collection;
import java.util.List;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonModelListener;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonProvider;
import ghidra.app.services.FunctionComparisonService;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.Program;
import ghidra.util.datastruct.Duo.Side;
/**
* A collection of {@link FunctionComparison function comparison}
* objects that describe how functions may be compared. Each comparison object
* is a mapping of a function (source) to a list of functions (targets).
* A model for comparing one or more functions in a side by side display. The model supports the
* concept of a set of function that can be selected for each side of the comparison. It also
* maintains the selected function for each side. The default model simply has a single set
* of functions that can be selected for either side of the comparison. The model supports the
* concept of different sets of functions for each and even the idea the the active function for
* one side can determine the set of functions for the other side. See
* {@link MatchedFunctionComparisonModel}.
* <p>
* This model is intended to be used by the {@link FunctionComparisonProvider}
* as the basis for its display. It should never be created manually, and should
* only be accessed via the {@link FunctionComparisonService}.
* This model is intended to be used by the the {@link FunctionComparisonService} to generate
* a function comparison display window.
* <p>
* Note: Subscribers may register to be informed of changes to this model via the
* {@link FunctionComparisonModelListener comparison model listener} interface.

View File

@ -13,9 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.base.codecompare.model;
import ghidra.app.services.FunctionComparisonModel;
import ghidra.program.model.listing.Function;
import ghidra.util.datastruct.Duo.Side;

View File

@ -16,7 +16,7 @@
/**
*
*/
package ghidra.app.services;
package ghidra.features.base.codecompare.model;
import static ghidra.util.datastruct.Duo.Side.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import java.util.Objects;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import java.awt.Component;

View File

@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import static ghidra.app.util.viewer.util.ComparisonData.*;
import static ghidra.features.base.codecompare.panel.ComparisonData.*;
import static ghidra.util.datastruct.Duo.Side.*;
import java.awt.*;
@ -29,8 +29,8 @@ import javax.swing.border.Border;
import docking.ActionContext;
import docking.ComponentProvider;
import docking.action.*;
import docking.widgets.TitledPanel;
import generic.theme.GThemeDefaults.Colors.Palette;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonPanel;
import ghidra.framework.plugintool.PluginTool;
import ghidra.program.model.address.AddressSetView;
import ghidra.program.model.listing.Function;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
/**
* Action context for a CodeComparisonPanel.

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import java.awt.Color;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import java.util.Objects;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import ghidra.program.model.address.AddressSet;
import ghidra.program.model.address.AddressSetView;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package ghidra.features.base.codecompare.panel;
import java.util.Objects;

View File

@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.base.codecompare.panel;
import static ghidra.app.util.viewer.util.ComparisonData.*;
import static ghidra.features.base.codecompare.panel.ComparisonData.*;
import static ghidra.util.datastruct.Duo.Side.*;
import java.awt.*;
@ -34,8 +34,7 @@ import docking.ComponentProvider;
import docking.action.*;
import docking.widgets.tabbedpane.DockingTabRenderer;
import generic.theme.GIcon;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.app.util.viewer.util.*;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.framework.options.SaveState;
import ghidra.framework.plugintool.PluginTool;
import ghidra.program.model.address.AddressSet;
@ -51,9 +50,6 @@ import help.HelpService;
/**
* A panel for displaying {@link Function functions}, {@link Data data}, or
* {@link AddressSet address sets} side-by-side for comparison purposes
* <p>
* Note: This is strictly for a one-to-one comparison; if multiple items are to
* be compared, use a {@link MultiFunctionComparisonPanel}
*/
public class FunctionComparisonPanel extends JPanel implements ChangeListener {
private static final String ORIENTATION_PROPERTY_NAME = "ORIENTATION";
@ -264,13 +260,13 @@ public class FunctionComparisonPanel extends JPanel implements ChangeListener {
}
}
void programClosed(Program program) {
public void programClosed(Program program) {
for (CodeComparisonPanel codeComparisonPanel : codeComparisonPanels) {
codeComparisonPanel.programClosed(program);
}
}
CodeComparisonPanel getCodeComparisonPanelByName(String name) {
public CodeComparisonPanel getCodeComparisonPanelByName(String name) {
for (CodeComparisonPanel codeComparisonPanel : codeComparisonPanels) {
if (name.equals(codeComparisonPanel.getName())) {
return codeComparisonPanel;
@ -471,7 +467,7 @@ public class FunctionComparisonPanel extends JPanel implements ChangeListener {
*
* @return null if there is no code comparison panel
*/
CodeComparisonPanel getCurrentComponent() {
public CodeComparisonPanel getCurrentComponent() {
return (CodeComparisonPanel) tabbedPane.getSelectedComponent();
}

View File

@ -19,7 +19,7 @@ import static ghidra.util.datastruct.Duo.Side.*;
import java.util.ArrayList;
import ghidra.app.util.viewer.listingpanel.ListingDiffChangeListener;
import ghidra.features.base.codecompare.listing.ListingDiffChangeListener;
import ghidra.program.model.address.*;
import ghidra.program.model.data.DataType;
import ghidra.program.model.lang.Register;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.base.codecompare.model;
import static ghidra.util.datastruct.Duo.Side.*;
import static org.junit.Assert.*;
@ -24,8 +24,9 @@ import org.junit.Before;
import org.junit.Test;
import generic.test.AbstractGenericTest;
import ghidra.app.services.DefaultFunctionComparisonModel;
import ghidra.app.services.FunctionComparisonService;
import ghidra.features.base.codecompare.model.DefaultFunctionComparisonModel;
import ghidra.features.base.codecompare.model.FunctionComparisonModelListener;
import ghidra.program.database.ProgramBuilder;
import ghidra.program.model.data.ByteDataType;
import ghidra.program.model.data.DataType;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.base.codecompare.model;
import static ghidra.util.datastruct.Duo.Side.*;
import static org.junit.Assert.*;
@ -25,7 +25,7 @@ import org.junit.Before;
import org.junit.Test;
import generic.test.AbstractGenericTest;
import ghidra.app.services.*;
import ghidra.app.services.FunctionComparisonService;
import ghidra.program.database.ProgramBuilder;
import ghidra.program.model.data.ByteDataType;
import ghidra.program.model.data.DataType;

View File

@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.feature.vt.api.correlator.address;
package ghidra.features.codecompare.correlator;
import java.util.*;
import java.util.Map.Entry;
import ghidra.app.decompiler.*;
import ghidra.codecompare.graphanalysis.Pinning;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.Pinning;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.program.model.address.*;
import ghidra.program.model.block.*;
import ghidra.program.model.listing.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.feature.vt.api.correlator.address;
package ghidra.features.codecompare.correlator;
import ghidra.framework.options.Options;
import ghidra.framework.options.ToolOptions;

View File

@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.feature.vt.api.correlator.address;
package ghidra.features.codecompare.correlator;
import java.awt.Color;
import java.util.*;
import java.util.Map.Entry;
import ghidra.app.util.viewer.listingpanel.PropertyBasedBackgroundColorModel;
import ghidra.feature.vt.api.correlator.address.CodeCompareAddressCorrelation.CorrelationContainer;
import ghidra.features.codecompare.correlator.CodeCompareAddressCorrelation.CorrelationContainer;
import ghidra.program.database.IntRangeMap;
import ghidra.program.model.address.*;
import ghidra.program.model.listing.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import static ghidra.util.datastruct.Duo.Side.*;
@ -25,7 +25,7 @@ import docking.action.DockingAction;
import ghidra.app.decompiler.ClangToken;
import ghidra.app.decompiler.DecompilerLocation;
import ghidra.app.decompiler.component.DecompilerPanel;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.program.model.listing.Program;
import ghidra.util.datastruct.Duo.Side;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import java.math.BigInteger;
import java.util.function.Consumer;
@ -24,7 +24,6 @@ import docking.widgets.fieldpanel.support.ViewerPosition;
import ghidra.GhidraOptions;
import ghidra.app.decompiler.DecompileOptions;
import ghidra.app.decompiler.component.*;
import ghidra.codecompare.DiffClangHighlightController;
import ghidra.framework.options.ToolOptions;
import ghidra.framework.plugintool.PluginTool;
import ghidra.program.model.address.Address;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import static ghidra.util.datastruct.Duo.Side.*;
@ -27,7 +27,7 @@ import org.apache.commons.collections4.bidimap.DualHashBidiMap;
import docking.widgets.fieldpanel.support.ViewerPosition;
import ghidra.app.decompiler.*;
import ghidra.app.decompiler.component.DecompilerPanel;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.program.model.pcode.HighFunction;
import ghidra.program.util.ProgramLocation;
import ghidra.util.exception.CancelledException;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import static ghidra.util.datastruct.Duo.Side.*;

View File

@ -13,15 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import java.util.ArrayList;
import java.util.HashSet;
import ghidra.app.decompiler.*;
import ghidra.app.decompiler.component.DecompileData;
import ghidra.codecompare.graphanalysis.Pinning;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.Pinning;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.program.model.pcode.HighFunction;
import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import java.awt.Color;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import static ghidra.util.datastruct.Duo.Side.*;
@ -32,9 +32,8 @@ import docking.options.OptionsService;
import generic.theme.GIcon;
import ghidra.app.decompiler.component.DecompileData;
import ghidra.app.decompiler.component.DecompilerPanel;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.codecompare.DiffClangHighlightController;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.framework.plugintool.PluginTool;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.Program;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import static ghidra.util.datastruct.Duo.Side.*;

View File

@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import java.util.List;
import java.util.Set;
import ghidra.app.decompiler.ClangToken;
import ghidra.codecompare.DiffClangHighlightController;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.util.exception.CancelledException;
import ghidra.util.task.Task;
import ghidra.util.task.TaskMonitor;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare;
package ghidra.features.codecompare.decompile;
import java.awt.Color;
import java.util.*;
@ -26,8 +26,7 @@ import generic.theme.GColor;
import ghidra.app.decompiler.ClangSyntaxToken;
import ghidra.app.decompiler.ClangToken;
import ghidra.app.decompiler.component.*;
import ghidra.codecompare.decompile.DecompilerCodeComparisonOptions;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.TokenBin;
import ghidra.util.ColorUtils;
import ghidra.util.SystemUtilities;
import util.CollectionUtils;

View File

@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare;
package ghidra.features.codecompare.decompile;
import ghidra.app.decompiler.ClangToken;
import ghidra.codecompare.graphanalysis.TokenBin;
import ghidra.features.codecompare.graphanalysis.TokenBin;
public interface DiffClangHighlightListener {

View File

@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import java.awt.Component;
import docking.ComponentProvider;
import ghidra.app.context.RestrictedAddressSetContext;
import ghidra.app.util.viewer.util.CodeComparisonActionContext;
import ghidra.features.base.codecompare.panel.CodeComparisonActionContext;
/**
* Action context for a dual decompiler panel.

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import static ghidra.util.datastruct.Duo.Side.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.decompile;
package ghidra.features.codecompare.decompile;
import ghidra.app.decompiler.ClangToken;

View File

@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
import java.util.*;
import ghidra.codecompare.graphanalysis.Pinning.Side;
import ghidra.features.codecompare.graphanalysis.Pinning.Side;
import ghidra.program.model.pcode.HighFunction;
import ghidra.program.model.pcode.PcodeBlockBasic;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
/**
* N-gram hash on the control-flow graph rooted at specific node {@link CtrlVertex}.

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
import java.util.ArrayList;

View File

@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
import java.io.IOException;
import java.io.Writer;
import java.util.*;
import ghidra.codecompare.graphanalysis.Pinning.Side;
import ghidra.features.codecompare.graphanalysis.Pinning.Side;
import ghidra.program.model.pcode.*;
/**

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
/**
* Sortable n-gram hash on the data-flow graph rooted at specific node {@link DataVertex}.

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
import java.util.ArrayList;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
import java.io.IOException;
import java.io.Writer;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.codecompare.graphanalysis;
package ghidra.features.codecompare.graphanalysis;
import java.util.*;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.codecompare.plugin;
import java.util.*;
import java.util.function.Consumer;
@ -25,6 +25,8 @@ import ghidra.app.events.*;
import ghidra.app.plugin.PluginCategoryNames;
import ghidra.app.plugin.ProgramPlugin;
import ghidra.app.services.*;
import ghidra.features.base.codecompare.model.DefaultFunctionComparisonModel;
import ghidra.features.base.codecompare.model.FunctionComparisonModel;
import ghidra.framework.model.*;
import ghidra.framework.plugintool.PluginInfo;
import ghidra.framework.plugintool.PluginTool;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.codecompare.plugin;
import static ghidra.util.datastruct.Duo.Side.*;
@ -34,9 +34,11 @@ import generic.theme.GIcon;
import ghidra.app.plugin.core.functionwindow.FunctionRowObject;
import ghidra.app.plugin.core.functionwindow.FunctionTableModel;
import ghidra.app.services.*;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.features.base.codecompare.model.*;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.base.codecompare.panel.FunctionComparisonPanel;
import ghidra.framework.options.SaveState;
import ghidra.framework.plugintool.ComponentProviderAdapter;
import ghidra.program.model.listing.Function;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.codecompare.plugin;
/**
* Allows subscribers to register for function comparison provider changes

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.codecompare.plugin;
import static ghidra.util.datastruct.Duo.Side.*;
@ -23,8 +23,10 @@ import java.awt.event.ItemListener;
import javax.swing.*;
import ghidra.app.services.FunctionComparisonModel;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.features.base.codecompare.model.FunctionComparisonModel;
import ghidra.features.base.codecompare.model.FunctionComparisonModelListener;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.base.codecompare.panel.FunctionComparisonPanel;
import ghidra.framework.plugintool.PluginTool;
import ghidra.program.model.listing.Function;
import ghidra.util.datastruct.Duo;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.core.functioncompare;
package ghidra.features.codecompare.plugin;
import static ghidra.util.datastruct.Duo.Side.*;
import static org.junit.Assert.*;
@ -33,8 +33,10 @@ import docking.widgets.dialogs.TableSelectionDialog;
import docking.widgets.table.GFilterTable;
import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin;
import ghidra.app.plugin.core.function.FunctionPlugin;
import ghidra.app.services.FunctionComparisonModel;
import ghidra.app.services.MatchedFunctionComparisonModel;
import ghidra.features.base.codecompare.model.FunctionComparisonModel;
import ghidra.features.base.codecompare.model.MatchedFunctionComparisonModel;
import ghidra.features.base.codecompare.panel.FunctionComparisonPanel;
import ghidra.features.codecompare.plugin.*;
import ghidra.program.database.ProgramBuilder;
import ghidra.program.model.address.Address;
import ghidra.program.model.data.ByteDataType;

View File

@ -24,12 +24,12 @@ import java.awt.dnd.*;
import java.util.ArrayList;
import docking.dnd.*;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.feature.vt.api.main.*;
import ghidra.feature.vt.api.markuptype.VTMarkupType;
import ghidra.feature.vt.gui.plugin.VTController;
import ghidra.feature.vt.gui.task.ApplyMarkupAtDestinationAddressTask;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.program.model.address.Address;
import ghidra.program.util.ProgramLocation;
import ghidra.util.Msg;

View File

@ -18,8 +18,8 @@ package ghidra.feature.vt.gui.duallisting;
import docking.ComponentProvider;
import ghidra.app.context.ListingActionContext;
import ghidra.app.nav.Navigatable;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.base.codecompare.panel.CodeComparisonPanelActionContext;
/**
* Action context for a version tracking listing.

View File

@ -19,8 +19,8 @@ import javax.swing.Icon;
import ghidra.app.nav.*;
import ghidra.app.util.ListingHighlightProvider;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.program.model.listing.Program;
import ghidra.program.util.ProgramLocation;
import ghidra.program.util.ProgramSelection;

View File

@ -150,8 +150,7 @@ public class VTPlugin extends Plugin {
private void addCustomPlugins() {
List<String> names = new ArrayList<>(
List.of("ghidra.app.plugin.core.functioncompare.FunctionComparisonPlugin"));
List<String> names = new ArrayList<>(List.of("ghidra.features.codecompare.plugin"));
List<Plugin> plugins = tool.getManagedPlugins();
Set<String> existingNames =
plugins.stream().map(c -> c.getName()).collect(Collectors.toSet());

View File

@ -39,8 +39,6 @@ import docking.widgets.label.GDLabel;
import docking.widgets.table.threaded.ThreadedTableModel;
import generic.theme.GIcon;
import generic.theme.GThemeDefaults.Colors;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.feature.vt.api.db.DeletedMatch;
import ghidra.feature.vt.api.impl.VTEvent;
@ -50,6 +48,8 @@ import ghidra.feature.vt.gui.actions.*;
import ghidra.feature.vt.gui.duallisting.VTListingNavigator;
import ghidra.feature.vt.gui.plugin.*;
import ghidra.feature.vt.gui.util.MatchInfo;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.features.base.codecompare.panel.FunctionComparisonPanel;
import ghidra.framework.model.*;
import ghidra.framework.options.Options;
import ghidra.framework.options.SaveState;

View File

@ -18,9 +18,9 @@ package ghidra.feature.vt.gui.provider.markuptable;
import java.util.List;
import docking.DefaultActionContext;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext;
import ghidra.feature.vt.api.main.VTMarkupItem;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.base.codecompare.panel.CodeComparisonPanelActionContext;
/**
* Action context for the version tracking markup item provider.

View File

@ -39,9 +39,8 @@ import docking.widgets.table.GTable;
import docking.widgets.table.RowObjectTableModel;
import docking.widgets.table.threaded.ThreadedTableModel;
import generic.theme.GIcon;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonPanel;
import ghidra.app.util.viewer.listingpanel.*;
import ghidra.app.util.viewer.util.CodeComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.app.util.viewer.listingpanel.ProgramLocationListener;
import ghidra.feature.vt.api.main.*;
import ghidra.feature.vt.api.markuptype.VTMarkupType;
import ghidra.feature.vt.gui.actions.*;
@ -52,6 +51,9 @@ import ghidra.feature.vt.gui.filters.Filter.FilterEditingStatus;
import ghidra.feature.vt.gui.plugin.*;
import ghidra.feature.vt.gui.provider.markuptable.VTMarkupItemsTableModel.AppliedDestinationAddressTableColumn;
import ghidra.feature.vt.gui.util.*;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.features.base.codecompare.panel.CodeComparisonPanel;
import ghidra.features.base.codecompare.panel.FunctionComparisonPanel;
import ghidra.framework.model.DomainObjectChangedEvent;
import ghidra.framework.options.Options;
import ghidra.framework.options.SaveState;

View File

@ -37,7 +37,6 @@ import docking.widgets.table.*;
import docking.widgets.table.threaded.ThreadedTableModel;
import generic.theme.GIcon;
import ghidra.app.services.FunctionComparisonService;
import ghidra.app.services.MatchedFunctionComparisonModel;
import ghidra.feature.vt.api.impl.VTEvent;
import ghidra.feature.vt.api.impl.VersionTrackingChangeRecord;
import ghidra.feature.vt.api.main.*;
@ -48,6 +47,7 @@ import ghidra.feature.vt.gui.filters.Filter.FilterEditingStatus;
import ghidra.feature.vt.gui.plugin.*;
import ghidra.feature.vt.gui.util.*;
import ghidra.feature.vt.gui.util.AbstractVTMatchTableModel.*;
import ghidra.features.base.codecompare.model.MatchedFunctionComparisonModel;
import ghidra.framework.model.*;
import ghidra.framework.options.Options;
import ghidra.framework.options.SaveState;

View File

@ -34,7 +34,6 @@ import docking.widgets.table.threaded.ThreadedTableModel;
import generic.theme.GColor;
import generic.theme.GIcon;
import ghidra.app.services.FunctionComparisonService;
import ghidra.app.services.MatchedFunctionComparisonModel;
import ghidra.feature.vt.api.impl.VTEvent;
import ghidra.feature.vt.api.main.*;
import ghidra.feature.vt.gui.actions.*;
@ -44,6 +43,7 @@ import ghidra.feature.vt.gui.plugin.*;
import ghidra.feature.vt.gui.provider.markuptable.DisplayableListingAddress;
import ghidra.feature.vt.gui.provider.matchtable.MatchTableRenderer;
import ghidra.feature.vt.gui.util.AbstractVTMatchTableModel.StatusTableColumn;
import ghidra.features.base.codecompare.model.MatchedFunctionComparisonModel;
import ghidra.feature.vt.gui.util.MatchInfo;
import ghidra.feature.vt.gui.util.MatchStatusRenderer;
import ghidra.framework.model.*;

View File

@ -34,7 +34,6 @@ import docking.action.ToggleDockingAction;
import docking.options.editor.OptionsDialog;
import docking.options.editor.OptionsPanel;
import docking.widgets.tree.GTree;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.feature.vt.api.correlator.program.ExactMatchInstructionsProgramCorrelatorFactory;
import ghidra.feature.vt.api.correlator.program.SymbolNameProgramCorrelatorFactory;
import ghidra.feature.vt.api.main.*;
@ -53,6 +52,7 @@ import ghidra.feature.vt.gui.provider.onetomany.VTMatchSourceTableProvider;
import ghidra.feature.vt.gui.task.*;
import ghidra.feature.vt.gui.util.MatchInfo;
import ghidra.feature.vt.gui.wizard.*;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.framework.main.DataTreeDialog;
import ghidra.framework.main.datatree.DataTree;
import ghidra.framework.main.datatree.ProjectDataTreePanel;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.util.viewer.util;
package docking.widgets;
import java.awt.BorderLayout;
import java.awt.Dimension;

View File

@ -29,9 +29,10 @@ import docking.widgets.dialogs.TableSelectionDialog;
import docking.widgets.table.GFilterTable;
import docking.widgets.table.GTable;
import ghidra.app.cmd.disassemble.DisassembleCommand;
import ghidra.app.plugin.core.functioncompare.*;
import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.features.base.codecompare.listing.ListingCodeComparisonPanel;
import ghidra.features.base.codecompare.panel.FunctionComparisonPanel;
import ghidra.features.codecompare.plugin.*;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressSet;
import ghidra.program.model.listing.*;

View File

@ -26,6 +26,7 @@ import javax.swing.border.TitledBorder;
import org.junit.*;
import docking.widgets.TitledPanel;
import docking.widgets.indexedscrollpane.IndexedScrollPane;
import generic.test.TestUtils;
import generic.theme.GThemeDefaults.Colors.Palette;
@ -34,7 +35,6 @@ import ghidra.app.merge.*;
import ghidra.app.merge.listing.*;
import ghidra.app.merge.tool.ListingMergePanel;
import ghidra.app.util.viewer.listingpanel.ListingPanel;
import ghidra.app.util.viewer.util.TitledPanel;
import ghidra.framework.main.FrontEndTool;
import ghidra.framework.model.DomainFile;
import ghidra.framework.model.DomainFolder;

View File

@ -23,11 +23,11 @@ import java.util.Set;
import org.junit.*;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonPlugin;
import ghidra.app.plugin.core.functioncompare.FunctionComparisonProvider;
import ghidra.app.services.FunctionComparisonModel;
import ghidra.codecompare.decompile.CDisplay;
import ghidra.codecompare.decompile.DecompilerCodeComparisonPanel;
import ghidra.features.base.codecompare.model.FunctionComparisonModel;
import ghidra.features.codecompare.decompile.CDisplay;
import ghidra.features.codecompare.decompile.DecompilerCodeComparisonPanel;
import ghidra.features.codecompare.plugin.FunctionComparisonPlugin;
import ghidra.features.codecompare.plugin.FunctionComparisonProvider;
import ghidra.program.model.address.Address;
import ghidra.program.model.listing.*;
import ghidra.test.*;