mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
GP-3696 - cleaning up function compare windows.
This commit is contained in:
parent
770f5447e1
commit
5ea8e97805
77 changed files with 4065 additions and 5654 deletions
|
@ -15,11 +15,13 @@
|
|||
*/
|
||||
package ghidra.feature.vt.api.correlator.address;
|
||||
|
||||
import static ghidra.util.datastruct.Duo.Side.*;
|
||||
|
||||
import ghidra.program.model.address.*;
|
||||
import ghidra.program.model.correlate.HashedFunctionAddressCorrelation;
|
||||
import ghidra.program.model.listing.Function;
|
||||
import ghidra.program.model.mem.MemoryAccessException;
|
||||
import ghidra.program.util.AddressCorrelation;
|
||||
import ghidra.program.util.*;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
import ghidra.util.task.TaskMonitor;
|
||||
|
@ -35,14 +37,15 @@ public class VTHashedFunctionAddressCorrelation implements AddressCorrelation {
|
|||
|
||||
private final Function sourceFunction;
|
||||
private final Function destinationFunction;
|
||||
private HashedFunctionAddressCorrelation addressCorrelation;
|
||||
private ListingAddressCorrelation addressCorrelation;
|
||||
|
||||
/**
|
||||
* Constructs an address correlation between two functions.
|
||||
* @param sourceFunction the source function
|
||||
* @param destinationFunction the destination function
|
||||
*/
|
||||
public VTHashedFunctionAddressCorrelation(Function sourceFunction, Function destinationFunction) {
|
||||
public VTHashedFunctionAddressCorrelation(Function sourceFunction,
|
||||
Function destinationFunction) {
|
||||
this.sourceFunction = sourceFunction;
|
||||
this.destinationFunction = destinationFunction;
|
||||
addressCorrelation = null;
|
||||
|
@ -58,7 +61,7 @@ public class VTHashedFunctionAddressCorrelation implements AddressCorrelation {
|
|||
throws CancelledException {
|
||||
try {
|
||||
initializeCorrelation(monitor);
|
||||
Address destinationAddress = addressCorrelation.getAddressInSecond(sourceAddress);
|
||||
Address destinationAddress = addressCorrelation.getAddress(RIGHT, sourceAddress);
|
||||
if (destinationAddress == null) {
|
||||
return null; // No matching destination.
|
||||
}
|
||||
|
@ -83,8 +86,13 @@ public class VTHashedFunctionAddressCorrelation implements AddressCorrelation {
|
|||
if (addressCorrelation != null) {
|
||||
return;
|
||||
}
|
||||
addressCorrelation =
|
||||
if (sourceFunction != null && destinationFunction != null) {
|
||||
addressCorrelation =
|
||||
new HashedFunctionAddressCorrelation(sourceFunction, destinationFunction,
|
||||
monitor);
|
||||
monitor);
|
||||
}
|
||||
else {
|
||||
addressCorrelation = new DummyListingAddressCorrelation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
*/
|
||||
package ghidra.feature.vt.gui.duallisting;
|
||||
|
||||
import static ghidra.util.datastruct.Duo.Side.*;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
|
@ -32,12 +34,11 @@ import ghidra.program.model.address.Address;
|
|||
import ghidra.program.util.ProgramLocation;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.SystemUtilities;
|
||||
import ghidra.util.datastruct.Duo;
|
||||
|
||||
public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
||||
|
||||
private final int SOURCE = 0; // left side
|
||||
private final int DESTINATION = 1; // right side
|
||||
private ListingPanel[] listingPanels = new ListingPanel[2];
|
||||
private Duo<ListingPanel> listingPanels;
|
||||
|
||||
private VTController controller;
|
||||
ListingCodeComparisonPanel dualListingPanel;
|
||||
|
@ -55,8 +56,9 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
ListingCodeComparisonPanel dualListingPanel) {
|
||||
this.controller = controller;
|
||||
this.dualListingPanel = dualListingPanel;
|
||||
listingPanels[SOURCE] = dualListingPanel.getLeftPanel();
|
||||
listingPanels[DESTINATION] = dualListingPanel.getRightPanel();
|
||||
ListingPanel leftPanel = dualListingPanel.getListingPanel(LEFT);
|
||||
ListingPanel rightPanel = dualListingPanel.getListingPanel(RIGHT);
|
||||
listingPanels = new Duo<>(leftPanel, rightPanel);
|
||||
setUpDragDrop();
|
||||
}
|
||||
|
||||
|
@ -68,7 +70,7 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
dragSource = DragSource.getDefaultDragSource();
|
||||
dragGestureAdapter = new DragGestureAdapter(this);
|
||||
dragSourceAdapter = new DragSrcAdapter(this);
|
||||
dragSource.createDefaultDragGestureRecognizer(listingPanels[SOURCE].getFieldPanel(),
|
||||
dragSource.createDefaultDragGestureRecognizer(listingPanels.get(LEFT).getFieldPanel(),
|
||||
dragAction, dragGestureAdapter);
|
||||
}
|
||||
|
||||
|
@ -79,7 +81,7 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
// set up the destination fieldPanel as a drop target that accepts mark-up items.
|
||||
dropTargetAdapter =
|
||||
new DropTgtAdapter(this, DnDConstants.ACTION_COPY_OR_MOVE, acceptableFlavors);
|
||||
dropTarget = new DropTarget(listingPanels[DESTINATION].getFieldPanel(),
|
||||
dropTarget = new DropTarget(listingPanels.get(RIGHT).getFieldPanel(),
|
||||
DnDConstants.ACTION_COPY_OR_MOVE, dropTargetAdapter, true);
|
||||
dropTarget.setActive(true);
|
||||
}
|
||||
|
@ -100,13 +102,14 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
|
||||
@Override
|
||||
public boolean isStartDragOk(DragGestureEvent e) {
|
||||
if (!listingPanels[SOURCE].isStartDragOk()) {
|
||||
if (!listingPanels.get(LEFT).isStartDragOk()) {
|
||||
return false;
|
||||
}
|
||||
Point p = e.getDragOrigin();
|
||||
ProgramLocation programLocation = listingPanels[SOURCE].getProgramLocation(p);
|
||||
VTMarkupItem markupItem = controller.getCurrentMarkupForLocation(programLocation,
|
||||
dualListingPanel.getLeftProgram());
|
||||
ProgramLocation programLocation = listingPanels.get(LEFT).getProgramLocation(p);
|
||||
VTMarkupItem markupItem =
|
||||
controller.getCurrentMarkupForLocation(programLocation,
|
||||
dualListingPanel.getProgram(LEFT));
|
||||
if (markupItem == null) {
|
||||
return false;
|
||||
}
|
||||
|
@ -122,13 +125,13 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
|
||||
@Override
|
||||
public Transferable getTransferable(Point p) {
|
||||
if (!listingPanels[SOURCE].contains(p)) {
|
||||
if (!listingPanels.get(LEFT).contains(p)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ProgramLocation programLocation = listingPanels[SOURCE].getProgramLocation(p);
|
||||
ProgramLocation programLocation = listingPanels.get(LEFT).getProgramLocation(p);
|
||||
VTMarkupItem markupItem = controller.getCurrentMarkupForLocation(programLocation,
|
||||
dualListingPanel.getLeftProgram());
|
||||
dualListingPanel.getProgram(LEFT));
|
||||
if (markupItem == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -145,10 +148,10 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
VTMarkupItem markupItem = (VTMarkupItem) obj;
|
||||
VTMarkupType markupType = markupItem.getMarkupType();
|
||||
Point p = event.getLocation();
|
||||
ProgramLocation loc = listingPanels[DESTINATION].getProgramLocation(p);
|
||||
ProgramLocation loc = listingPanels.get(RIGHT).getProgramLocation(p);
|
||||
|
||||
Address newDestinationAddress =
|
||||
markupType.getAddress(loc, dualListingPanel.getRightProgram());
|
||||
markupType.getAddress(loc, dualListingPanel.getProgram(RIGHT));
|
||||
if (newDestinationAddress == null) {
|
||||
Msg.showInfo(getClass(), dualListingPanel, "Invalid Drop Location",
|
||||
markupType.getDisplayName() + " was not dropped at a valid location.");
|
||||
|
@ -166,11 +169,6 @@ public class VTDualListingDragNDropHandler implements Draggable, Droppable {
|
|||
ArrayList<VTMarkupItem> arrayList = new ArrayList<VTMarkupItem>();
|
||||
arrayList.add(markupItem);
|
||||
|
||||
// Use the following if you only want to set the address.
|
||||
// SetMarkupItemDestinationAddressTask task =
|
||||
// new SetMarkupItemDestinationAddressTask(controller.getSession(), arrayList,
|
||||
// newDestinationAddress);
|
||||
|
||||
// Use the following if you want to set the address and apply the markup item using the default action.
|
||||
ApplyMarkupAtDestinationAddressTask task = new ApplyMarkupAtDestinationAddressTask(
|
||||
controller.getSession(), arrayList, newDestinationAddress, controller.getOptions());
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
package ghidra.feature.vt.gui.duallisting;
|
||||
|
||||
import docking.ComponentProvider;
|
||||
import docking.widgets.fieldpanel.internal.FieldPanelCoordinator;
|
||||
import ghidra.app.context.ListingActionContext;
|
||||
import ghidra.app.nav.Navigatable;
|
||||
import ghidra.app.util.viewer.util.CodeComparisonPanel;
|
||||
|
@ -28,7 +27,7 @@ import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext;
|
|||
public class VTListingContext extends ListingActionContext
|
||||
implements CodeComparisonPanelActionContext {
|
||||
|
||||
private CodeComparisonPanel<? extends FieldPanelCoordinator> codeComparisonPanel = null;
|
||||
private CodeComparisonPanel codeComparisonPanel = null;
|
||||
|
||||
/**
|
||||
* Creates an action context for a VT listing.
|
||||
|
@ -44,12 +43,12 @@ public class VTListingContext extends ListingActionContext
|
|||
* @param codeComparisonPanel the code comparison panel.
|
||||
*/
|
||||
public void setCodeComparisonPanel(
|
||||
CodeComparisonPanel<? extends FieldPanelCoordinator> codeComparisonPanel) {
|
||||
CodeComparisonPanel codeComparisonPanel) {
|
||||
this.codeComparisonPanel = codeComparisonPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CodeComparisonPanel<? extends FieldPanelCoordinator> getCodeComparisonPanel() {
|
||||
public CodeComparisonPanel getCodeComparisonPanel() {
|
||||
return codeComparisonPanel;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,13 +92,7 @@ public class VTListingNavigator implements Navigatable {
|
|||
|
||||
@Override
|
||||
public boolean goTo(Program program, ProgramLocation location) {
|
||||
boolean went = listingPanel.goTo(location);
|
||||
// If we tried to go but couldn't, try again after showing entire listing.
|
||||
if (!went && !dualListingPanel.isEntireListingShowing()) {
|
||||
dualListingPanel.showEntireListing(true);
|
||||
return listingPanel.goTo(location);
|
||||
}
|
||||
return went;
|
||||
return listingPanel.goTo(location);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -147,7 +141,8 @@ public class VTListingNavigator implements Navigatable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void removeHighlightProvider(ListingHighlightProvider highlightProvider, Program program) {
|
||||
public void removeHighlightProvider(ListingHighlightProvider highlightProvider,
|
||||
Program program) {
|
||||
// currently unsupported
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
package ghidra.feature.vt.gui.provider.functionassociation;
|
||||
|
||||
import static ghidra.feature.vt.gui.provider.functionassociation.FilterSettings.*;
|
||||
import static ghidra.util.datastruct.Duo.Side.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
@ -220,7 +221,7 @@ public class VTFunctionAssociationProvider extends ComponentProviderAdapter
|
|||
ListingCodeComparisonPanel dualListingPanel =
|
||||
functionComparisonPanel.getDualListingPanel();
|
||||
if (dualListingPanel != null) {
|
||||
ListingPanel leftPanel = dualListingPanel.getLeftPanel();
|
||||
ListingPanel leftPanel = dualListingPanel.getListingPanel(LEFT);
|
||||
return leftPanel.getHeaderActions(getName());
|
||||
}
|
||||
}
|
||||
|
@ -261,7 +262,7 @@ public class VTFunctionAssociationProvider extends ComponentProviderAdapter
|
|||
}
|
||||
// Is the action being taken on a toolbar button while the dual listing is visible?
|
||||
else if (isToolbarButtonAction && isShowingDualListing) {
|
||||
listingPanel = dualListingPanel.getFocusedListingPanel();
|
||||
listingPanel = dualListingPanel.getActiveListingPanel();
|
||||
}
|
||||
// If the dual listing is showing and this is a toolbar action or the action is
|
||||
// on one of the listings in the ListingCodeComparisonPanel
|
||||
|
@ -367,10 +368,9 @@ public class VTFunctionAssociationProvider extends ComponentProviderAdapter
|
|||
statusPanel.add(statusLabel, BorderLayout.CENTER);
|
||||
dualTablePanel.add(statusPanel, BorderLayout.SOUTH);
|
||||
|
||||
functionComparisonPanel =
|
||||
new FunctionComparisonPanel(this, tool, (Function) null, (Function) null);
|
||||
functionComparisonPanel = new FunctionComparisonPanel(this, tool);
|
||||
addSpecificCodeComparisonActions();
|
||||
functionComparisonPanel.setCurrentTabbedComponent(ListingCodeComparisonPanel.TITLE);
|
||||
functionComparisonPanel.setCurrentTabbedComponent(ListingCodeComparisonPanel.NAME);
|
||||
functionComparisonPanel.setTitlePrefixes("Source:", "Destination:");
|
||||
|
||||
comparisonSplitPane =
|
||||
|
|
|
@ -18,7 +18,6 @@ package ghidra.feature.vt.gui.provider.markuptable;
|
|||
import java.util.List;
|
||||
|
||||
import docking.DefaultActionContext;
|
||||
import docking.widgets.fieldpanel.internal.FieldPanelCoordinator;
|
||||
import ghidra.app.util.viewer.util.CodeComparisonPanel;
|
||||
import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext;
|
||||
import ghidra.feature.vt.api.main.VTMarkupItem;
|
||||
|
@ -30,7 +29,7 @@ public class VTMarkupItemContext extends DefaultActionContext
|
|||
implements CodeComparisonPanelActionContext {
|
||||
|
||||
private final List<VTMarkupItem> selectedItems;
|
||||
private CodeComparisonPanel<? extends FieldPanelCoordinator> codeComparisonPanel = null;
|
||||
private CodeComparisonPanel codeComparisonPanel = null;
|
||||
|
||||
/**
|
||||
* Creates an action context for the VT markup item provider.
|
||||
|
@ -55,12 +54,12 @@ public class VTMarkupItemContext extends DefaultActionContext
|
|||
* @param codeComparisonPanel the code comparison panel.
|
||||
*/
|
||||
public void setCodeComparisonPanel(
|
||||
CodeComparisonPanel<? extends FieldPanelCoordinator> codeComparisonPanel) {
|
||||
CodeComparisonPanel codeComparisonPanel) {
|
||||
this.codeComparisonPanel = codeComparisonPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CodeComparisonPanel<? extends FieldPanelCoordinator> getCodeComparisonPanel() {
|
||||
public CodeComparisonPanel getCodeComparisonPanel() {
|
||||
return codeComparisonPanel;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package ghidra.feature.vt.gui.provider.markuptable;
|
|||
import static ghidra.feature.vt.api.impl.VTEvent.*;
|
||||
import static ghidra.feature.vt.gui.plugin.VTPlugin.*;
|
||||
import static ghidra.framework.model.DomainObjectEvent.*;
|
||||
import static ghidra.util.datastruct.Duo.Side.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
@ -34,7 +35,6 @@ import docking.action.*;
|
|||
import docking.actions.PopupActionProvider;
|
||||
import docking.widgets.EventTrigger;
|
||||
import docking.widgets.fieldpanel.FieldPanel;
|
||||
import docking.widgets.fieldpanel.internal.FieldPanelCoordinator;
|
||||
import docking.widgets.table.GTable;
|
||||
import docking.widgets.table.RowObjectTableModel;
|
||||
import docking.widgets.table.threaded.ThreadedTableModel;
|
||||
|
@ -150,23 +150,24 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
markupItemsTablePanel.add(tablePanel, BorderLayout.CENTER);
|
||||
markupItemsTablePanel.add(filterAreaPanel, BorderLayout.SOUTH);
|
||||
|
||||
functionComparisonPanel =
|
||||
new FunctionComparisonPanel(this, tool, (Function) null, (Function) null);
|
||||
functionComparisonPanel = new FunctionComparisonPanel(this, tool);
|
||||
addSpecificCodeComparisonActions();
|
||||
functionComparisonPanel.setCurrentTabbedComponent(ListingCodeComparisonPanel.TITLE);
|
||||
functionComparisonPanel.setCurrentTabbedComponent(ListingCodeComparisonPanel.NAME);
|
||||
functionComparisonPanel.setTitlePrefixes("Source:", "Destination:");
|
||||
ListingCodeComparisonPanel dualListingPanel = functionComparisonPanel.getDualListingPanel();
|
||||
if (dualListingPanel != null) {
|
||||
dualListingPanel.setLeftProgramLocationListener(new SourceProgramLocationListener());
|
||||
dualListingPanel
|
||||
.setRightProgramLocationListener(new DestinationProgramLocationListener());
|
||||
|
||||
dualListingPanel.getListingPanel(LEFT)
|
||||
.setProgramLocationListener(new SourceProgramLocationListener());
|
||||
dualListingPanel.getListingPanel(RIGHT).setProgramLocationListener(
|
||||
new DestinationProgramLocationListener());
|
||||
|
||||
sourceHighlightProvider = new VTDualListingHighlightProvider(controller, true);
|
||||
destinationHighlightProvider = new VTDualListingHighlightProvider(controller, false);
|
||||
dualListingPanel.addHighlightProviders(sourceHighlightProvider,
|
||||
destinationHighlightProvider);
|
||||
sourceHighlightProvider.setListingPanel(dualListingPanel.getLeftPanel());
|
||||
destinationHighlightProvider.setListingPanel(dualListingPanel.getRightPanel());
|
||||
sourceHighlightProvider.setListingPanel(dualListingPanel.getListingPanel(LEFT));
|
||||
destinationHighlightProvider.setListingPanel(dualListingPanel.getListingPanel(RIGHT));
|
||||
|
||||
new VTDualListingDragNDropHandler(controller, dualListingPanel);
|
||||
}
|
||||
|
@ -267,24 +268,24 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
// Don't set source or destination if the location change was initiated by the dual listing.
|
||||
if (!processingSourceLocationChange &&
|
||||
!processingDestinationLocationChange) {
|
||||
dualListingPanel.setLeftLocation(dualListingPanel.getLeftProgram(),
|
||||
dualListingPanel.setLocation(LEFT, dualListingPanel.getProgram(LEFT),
|
||||
markupItem.getSourceLocation());
|
||||
dualListingPanel.setRightLocation(dualListingPanel.getRightProgram(),
|
||||
dualListingPanel.setLocation(RIGHT, dualListingPanel.getProgram(RIGHT),
|
||||
markupItem.getDestinationLocation());
|
||||
}
|
||||
else {
|
||||
// Only adjust the side of the dual listing panel that didn't initiate this.
|
||||
ProgramLocation sourceLocation = markupItem.getSourceLocation();
|
||||
if (processingDestinationLocationChange && sourceLocation != null) {
|
||||
dualListingPanel.setLeftLocation(dualListingPanel.getLeftProgram(),
|
||||
sourceLocation);
|
||||
dualListingPanel.setLocation(LEFT,
|
||||
dualListingPanel.getProgram(LEFT), sourceLocation);
|
||||
}
|
||||
|
||||
ProgramLocation destinationLocation =
|
||||
markupItem.getDestinationLocation();
|
||||
if (processingSourceLocationChange && destinationLocation != null) {
|
||||
dualListingPanel.setRightLocation(
|
||||
dualListingPanel.getRightProgram(), destinationLocation);
|
||||
dualListingPanel.setLocation(RIGHT,
|
||||
dualListingPanel.getProgram(RIGHT), destinationLocation);
|
||||
}
|
||||
}
|
||||
dualListingPanel.updateListings(); // refresh the dual listing's background markup colors.
|
||||
|
@ -361,10 +362,10 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
splitPane.add(functionComparisonPanel);
|
||||
markupPanel.add(splitPane, BorderLayout.CENTER);
|
||||
if (dualListingPanel != null) {
|
||||
dualListingPanel
|
||||
.setLeftProgramLocationListener(new SourceProgramLocationListener());
|
||||
dualListingPanel.setRightProgramLocationListener(
|
||||
new DestinationProgramLocationListener());
|
||||
dualListingPanel.getListingPanel(LEFT)
|
||||
.setProgramLocationListener(new SourceProgramLocationListener());
|
||||
dualListingPanel.getListingPanel(LEFT)
|
||||
.setProgramLocationListener(new DestinationProgramLocationListener());
|
||||
}
|
||||
|
||||
markupPanel.validate();
|
||||
|
@ -378,8 +379,8 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
if (contains) {
|
||||
// Remove the split pane.
|
||||
if (dualListingPanel != null) {
|
||||
dualListingPanel.setLeftProgramLocationListener(null);
|
||||
dualListingPanel.setRightProgramLocationListener(null);
|
||||
dualListingPanel.getListingPanel(LEFT).setProgramLocationListener(null);
|
||||
dualListingPanel.getListingPanel(RIGHT).setProgramLocationListener(null);
|
||||
}
|
||||
markupPanel.remove(splitPane);
|
||||
splitPane.remove(functionComparisonPanel);
|
||||
|
@ -462,7 +463,7 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
public List<DockingActionIf> getPopupActions(Tool t, ActionContext context) {
|
||||
ListingCodeComparisonPanel dualListingPanel = functionComparisonPanel.getDualListingPanel();
|
||||
if (context.getComponentProvider() == this && dualListingPanel != null) {
|
||||
ListingPanel sourcePanel = dualListingPanel.getLeftPanel();
|
||||
ListingPanel sourcePanel = dualListingPanel.getListingPanel(LEFT);
|
||||
return sourcePanel.getHeaderActions(getName());
|
||||
}
|
||||
return new ArrayList<>();
|
||||
|
@ -477,7 +478,7 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
List<VTMarkupItem> selectedItems = getSelectedMarkupItems();
|
||||
VTMarkupItemContext vtMarkupItemContext = new VTMarkupItemContext(this, selectedItems);
|
||||
if (functionComparisonPanel.isVisible()) {
|
||||
CodeComparisonPanel<? extends FieldPanelCoordinator> displayedPanel =
|
||||
CodeComparisonPanel displayedPanel =
|
||||
functionComparisonPanel.getDisplayedPanel();
|
||||
vtMarkupItemContext.setCodeComparisonPanel(displayedPanel);
|
||||
}
|
||||
|
@ -626,7 +627,7 @@ public class VTMarkupItemsTableProvider extends ComponentProviderAdapter
|
|||
}
|
||||
}
|
||||
else {
|
||||
functionComparisonPanel.loadFunctions(null, null);
|
||||
functionComparisonPanel.clear();
|
||||
}
|
||||
|
||||
if (sourceHighlightProvider != null) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue