diff --git a/Ghidra/Features/BSim/ghidra_scripts/LocalBSimQueryScript.java b/Ghidra/Features/BSim/ghidra_scripts/LocalBSimQueryScript.java index 8e80902e8a..87bd14ed72 100644 --- a/Ghidra/Features/BSim/ghidra_scripts/LocalBSimQueryScript.java +++ b/Ghidra/Features/BSim/ghidra_scripts/LocalBSimQueryScript.java @@ -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; diff --git a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java index f2afad0098..c6ad4a60dd 100644 --- a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java +++ b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java @@ -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; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java index 9ffe455eb2..5fb75fbb2a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java @@ -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; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java index bf39ad664f..fde9f3b9e4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java @@ -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; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/nav/ListingPanelContainer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/nav/ListingPanelContainer.java index 4a4551cbd4..f0a78728f6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/nav/ListingPanelContainer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/nav/ListingPanelContainer.java @@ -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 { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/AbstractFunctionComparisonApplyAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/AbstractFunctionComparisonApplyAction.java index de852b593c..b7ac2757df 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/AbstractFunctionComparisonApplyAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/AbstractFunctionComparisonApplyAction.java @@ -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; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/services/FunctionComparisonService.java b/Ghidra/Features/Base/src/main/java/ghidra/app/services/FunctionComparisonService.java index 05d2f769a5..ae1b319f2f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/services/FunctionComparisonService.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/services/FunctionComparisonService.java @@ -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 * *
Concurrent usage: All work performed by this service will be done asynchronously on the
* Swing thread.
*/
-@ServiceInfo(defaultProvider = FunctionComparisonPlugin.class)
public interface FunctionComparisonService {
/**
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingGoToService.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingGoToService.java
deleted file mode 100644
index 51cb42ade0..0000000000
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingGoToService.java
+++ /dev/null
@@ -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();
- }
-}
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingServiceProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingServiceProvider.java
deleted file mode 100644
index 4a80ad1891..0000000000
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/DualListingServiceProvider.java
+++ /dev/null
@@ -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
- * 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.
*
* Note: Subscribers may register to be informed of changes to this model via the
* {@link FunctionComparisonModelListener comparison model listener} interface.
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonModelListener.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/model/FunctionComparisonModelListener.java
similarity index 92%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonModelListener.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/model/FunctionComparisonModelListener.java
index 6accb19dc9..9678f0aff8 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonModelListener.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/model/FunctionComparisonModelListener.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/services/MatchedFunctionComparisonModel.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/model/MatchedFunctionComparisonModel.java
similarity index 99%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/services/MatchedFunctionComparisonModel.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/model/MatchedFunctionComparisonModel.java
index 1aa8b6c216..ddd9d9325e 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/services/MatchedFunctionComparisonModel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/model/MatchedFunctionComparisonModel.java
@@ -16,7 +16,7 @@
/**
*
*/
-package ghidra.app.services;
+package ghidra.features.base.codecompare.model;
import static ghidra.util.datastruct.Duo.Side.*;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/AddressSetComparisonData.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/AddressSetComparisonData.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/AddressSetComparisonData.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/AddressSetComparisonData.java
index 49d5fc13fa..785d2706d6 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/AddressSetComparisonData.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/AddressSetComparisonData.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonActionContext.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonActionContext.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonActionContext.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonActionContext.java
index f798bc7aa2..8e7e77ceb7 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonActionContext.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonActionContext.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonPanel.java
similarity index 98%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonPanel.java
index 3431c2021c..deaae484d9 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonPanel.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanelActionContext.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonPanelActionContext.java
similarity index 94%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanelActionContext.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonPanelActionContext.java
index 1082410139..b923b851fd 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanelActionContext.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/CodeComparisonPanelActionContext.java
@@ -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.
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/ComparisonData.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/ComparisonData.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/ComparisonData.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/ComparisonData.java
index f112453437..a4a6db0366 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/ComparisonData.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/ComparisonData.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/DataComparisonData.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/DataComparisonData.java
similarity index 98%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/DataComparisonData.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/DataComparisonData.java
index c7b80d0925..859d6ab907 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/DataComparisonData.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/DataComparisonData.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/EmptyComparisonData.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/EmptyComparisonData.java
similarity index 96%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/EmptyComparisonData.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/EmptyComparisonData.java
index de6cccf4b2..36313401c3 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/EmptyComparisonData.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/EmptyComparisonData.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/FunctionComparisonData.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/FunctionComparisonData.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/FunctionComparisonData.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/FunctionComparisonData.java
index 9c6a22081b..4c8080f4f1 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/FunctionComparisonData.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/FunctionComparisonData.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/FunctionComparisonPanel.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java
rename to Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/FunctionComparisonPanel.java
index 8011e84c75..b68d53e465 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/features/base/codecompare/panel/FunctionComparisonPanel.java
@@ -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
- *
- * 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();
}
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/util/ListingDiff.java b/Ghidra/Features/Base/src/main/java/ghidra/program/util/ListingDiff.java
index 520fe84fb5..5523f4c4ec 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/program/util/ListingDiff.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/program/util/ListingDiff.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/DefaultComparisonModelTest.java b/Ghidra/Features/Base/src/test/java/ghidra/features/base/codecompare/model/DefaultComparisonModelTest.java
similarity index 98%
rename from Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/DefaultComparisonModelTest.java
rename to Ghidra/Features/Base/src/test/java/ghidra/features/base/codecompare/model/DefaultComparisonModelTest.java
index f3781484af..90430867d9 100644
--- a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/DefaultComparisonModelTest.java
+++ b/Ghidra/Features/Base/src/test/java/ghidra/features/base/codecompare/model/DefaultComparisonModelTest.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/MatchedFunctionComparisonModelTest.java b/Ghidra/Features/Base/src/test/java/ghidra/features/base/codecompare/model/MatchedFunctionComparisonModelTest.java
similarity index 99%
rename from Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/MatchedFunctionComparisonModelTest.java
rename to Ghidra/Features/Base/src/test/java/ghidra/features/base/codecompare/model/MatchedFunctionComparisonModelTest.java
index 0d8a72c9b7..fb816a2031 100644
--- a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/MatchedFunctionComparisonModelTest.java
+++ b/Ghidra/Features/Base/src/test/java/ghidra/features/base/codecompare/model/MatchedFunctionComparisonModelTest.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/CodeCompareAddressCorrelation.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelation.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/CodeCompareAddressCorrelation.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelation.java
index c286955ec4..d5f601330b 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/CodeCompareAddressCorrelation.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelation.java
@@ -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.*;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/CodeCompareAddressCorrelator.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelator.java
similarity index 97%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/CodeCompareAddressCorrelator.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelator.java
index 5d6a9f4afd..c68744698f 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/CodeCompareAddressCorrelator.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelator.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/DebugUtils.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/DebugUtils.java
similarity index 97%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/DebugUtils.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/DebugUtils.java
index 504af48049..e3df2cb577 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/feature/vt/api/correlator/address/DebugUtils.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/DebugUtils.java
@@ -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.*;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/AbstractMatchedTokensAction.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/AbstractMatchedTokensAction.java
similarity index 97%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/AbstractMatchedTokensAction.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/AbstractMatchedTokensAction.java
index f195272ef0..e00c3384db 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/AbstractMatchedTokensAction.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/AbstractMatchedTokensAction.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CDisplay.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CDisplay.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CDisplay.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CDisplay.java
index 83aad0dc5c..160c243185 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CDisplay.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CDisplay.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CodeDiffFieldPanelCoordinator.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CodeDiffFieldPanelCoordinator.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CodeDiffFieldPanelCoordinator.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CodeDiffFieldPanelCoordinator.java
index f3ae591e13..85db586fb8 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CodeDiffFieldPanelCoordinator.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CodeDiffFieldPanelCoordinator.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java
index 4428178ee7..127d862c9c 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java
@@ -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.*;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompileDataDiff.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompileDataDiff.java
similarity index 97%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompileDataDiff.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompileDataDiff.java
index 3af1359ff6..1b8b3a0c6c 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompileDataDiff.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompileDataDiff.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerCodeComparisonOptions.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerCodeComparisonOptions.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerCodeComparisonOptions.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerCodeComparisonOptions.java
index 9f4d6b08ca..19bdc71ee1 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerCodeComparisonOptions.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerCodeComparisonOptions.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerCodeComparisonPanel.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerCodeComparisonPanel.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerCodeComparisonPanel.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerCodeComparisonPanel.java
index ba96d5ea2e..e2443c745a 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerCodeComparisonPanel.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerCodeComparisonPanel.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerDiffViewFindAction.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerDiffViewFindAction.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerDiffViewFindAction.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerDiffViewFindAction.java
index 5e43233797..030b0c34aa 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DecompilerDiffViewFindAction.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DecompilerDiffViewFindAction.java
@@ -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.*;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DetermineDecompilerDifferencesTask.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DetermineDecompilerDifferencesTask.java
similarity index 95%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DetermineDecompilerDifferencesTask.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DetermineDecompilerDifferencesTask.java
index 11615891c7..f243d1774b 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DetermineDecompilerDifferencesTask.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DetermineDecompilerDifferencesTask.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/DiffClangHighlightController.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DiffClangHighlightController.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/DiffClangHighlightController.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DiffClangHighlightController.java
index 9582c4b08c..8022db49b1 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/DiffClangHighlightController.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DiffClangHighlightController.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/DiffClangHighlightListener.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DiffClangHighlightListener.java
similarity index 89%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/DiffClangHighlightListener.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DiffClangHighlightListener.java
index 54092e85e1..3aeae375c7 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/DiffClangHighlightListener.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DiffClangHighlightListener.java
@@ -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 {
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DualDecompilerActionContext.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DualDecompilerActionContext.java
similarity index 93%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DualDecompilerActionContext.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DualDecompilerActionContext.java
index f3939e00ef..4c1e5b22c8 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DualDecompilerActionContext.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DualDecompilerActionContext.java
@@ -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.
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DualDecompilerFieldPanelCoordinator.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DualDecompilerFieldPanelCoordinator.java
similarity index 96%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DualDecompilerFieldPanelCoordinator.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DualDecompilerFieldPanelCoordinator.java
index de169cb176..3c569b6dee 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/DualDecompilerFieldPanelCoordinator.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/DualDecompilerFieldPanelCoordinator.java
@@ -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.*;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/TokenPair.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/TokenPair.java
similarity index 93%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/TokenPair.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/TokenPair.java
index 4b917f038c..e08a76075f 100644
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/decompile/TokenPair.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/TokenPair.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlGraph.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlGraph.java
similarity index 96%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlGraph.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlGraph.java
index 8cfe8006ec..2bcb370761 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlGraph.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlGraph.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlNGram.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlNGram.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlNGram.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlNGram.java
index 0a14e41c28..79ffb3b7a9 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlNGram.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlNGram.java
@@ -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}.
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlVertex.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlVertex.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlVertex.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlVertex.java
index 47013b2325..ed09bccbd8 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/CtrlVertex.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/CtrlVertex.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataGraph.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataGraph.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataGraph.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataGraph.java
index 97b69d556e..801c5869d4 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataGraph.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataGraph.java
@@ -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.*;
/**
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataNGram.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataNGram.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataNGram.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataNGram.java
index 77967325bf..3aafc312bd 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataNGram.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataNGram.java
@@ -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}.
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataVertex.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataVertex.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataVertex.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataVertex.java
index 25c5cc43ba..c07918cf81 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/DataVertex.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataVertex.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/Pinning.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java
similarity index 99%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/Pinning.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java
index 4344f648b6..205db313ad 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/Pinning.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java
@@ -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;
diff --git a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/TokenBin.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/TokenBin.java
similarity index 98%
rename from Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/TokenBin.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/TokenBin.java
index 5e60738f97..24de4b2012 100755
--- a/Ghidra/Features/CodeCompare/src/main/java/ghidra/codecompare/graphanalysis/TokenBin.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/TokenBin.java
@@ -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.*;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPlugin.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonPlugin.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPlugin.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonPlugin.java
index 87d794f1d2..0ddda5906e 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPlugin.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonPlugin.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonProvider.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonProvider.java
similarity index 97%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonProvider.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonProvider.java
index b6c01350c6..217fbf9da1 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonProvider.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonProvider.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonProviderListener.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonProviderListener.java
similarity index 95%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonProviderListener.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonProviderListener.java
index 449b9a5f87..4ee23b1b1a 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonProviderListener.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/FunctionComparisonProviderListener.java
@@ -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
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/MultiFunctionComparisonPanel.java
similarity index 95%
rename from Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java
rename to Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/MultiFunctionComparisonPanel.java
index 84dca8805d..89ac1ace8b 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java
+++ b/Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/plugin/MultiFunctionComparisonPanel.java
@@ -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;
diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/CompareFunctionsProviderTest.java b/Ghidra/Features/CodeCompare/src/main/test/ghidra/features/codecompare/plugin/CompareFunctionsProviderTest.java
similarity index 97%
rename from Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/CompareFunctionsProviderTest.java
rename to Ghidra/Features/CodeCompare/src/main/test/ghidra/features/codecompare/plugin/CompareFunctionsProviderTest.java
index cbf6985bd1..691fec0c9f 100644
--- a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/functioncompare/CompareFunctionsProviderTest.java
+++ b/Ghidra/Features/CodeCompare/src/main/test/ghidra/features/codecompare/plugin/CompareFunctionsProviderTest.java
@@ -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;
diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingDragNDropHandler.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingDragNDropHandler.java
index be29631133..dbeeb83e46 100644
--- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingDragNDropHandler.java
+++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingDragNDropHandler.java
@@ -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;
diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingContext.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingContext.java
index edaff79d26..db7fe8a7af 100644
--- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingContext.java
+++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingContext.java
@@ -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.
diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java
index f54883be0e..934c82ac9b 100644
--- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java
+++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTListingNavigator.java
@@ -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;
diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java
index e76f605c50..584b27f9b9 100644
--- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java
+++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java
@@ -150,8 +150,7 @@ public class VTPlugin extends Plugin {
private void addCustomPlugins() {
- List