Package ghidra.app.decompiler.component
Class DecompilerCodeComparisonPanel<T extends DualDecompilerFieldPanelCoordinator>
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- ghidra.app.util.viewer.util.CodeComparisonPanel<DualDecompilerFieldPanelCoordinator>
-
- ghidra.app.decompiler.component.DecompilerCodeComparisonPanel<T>
-
- All Implemented Interfaces:
ExtensionPoint,java.awt.event.FocusListener,java.awt.image.ImageObserver,java.awt.MenuContainer,java.io.Serializable,java.util.EventListener,javax.accessibility.Accessible
- Direct Known Subclasses:
BasicDecompilerCodeComparisonPanel
public abstract class DecompilerCodeComparisonPanel<T extends DualDecompilerFieldPanelCoordinator> extends CodeComparisonPanel<DualDecompilerFieldPanelCoordinator>
Panel that displays two decompilers for comparison.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
-
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
-
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
-
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
-
Nested classes/interfaces inherited from interface ghidra.util.classfinder.ExtensionPoint
ExtensionPoint.Exclude, ExtensionPoint.Util
-
-
Field Summary
-
Fields inherited from class ghidra.app.util.viewer.util.CodeComparisonPanel
bottomComp, currProgramIndex, data, EMPTY_ADDRESS_SET, FOCUS_BORDER, functions, LEFT, leftTitlePrefix, MINIMUM_PANEL_WIDTH, NON_FOCUS_BORDER, owner, programs, RIGHT, rightTitlePrefix, titlePanels, tool, topComp
-
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
-
Constructor Summary
Constructors Constructor Description DecompilerCodeComparisonPanel(java.lang.String owner, PluginTool tool)Creates a comparison panel with two decompilers.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleanaddDualDecompileResultsListener(DualDecompileResultsListener listener)Adds the indicated listener to be notified when the decompile results have completed.protected voidcreateActions()Creates the actions provided by this panel.protected abstract DualDecompilerFieldPanelCoordinatorcreateFieldPanelCoordinator()Creates a new FieldPanelCoordinator used to synchronize scrolling between the left and right view for this CodeComparisonPanel.voiddispose()Cleans up resources when this panel is no longer needed.voidfocusGained(java.awt.event.FocusEvent e)ActionContextgetActionContext(ComponentProvider provider, java.awt.event.MouseEvent event)Returns the context object which corresponds to the area of focus within this provider's component.DockingAction[]getActions()Get the actions for this CodeComparisonPanel.javax.swing.JComponentgetComponent()The GUI component for this CodeComparisonPanel.CDisplayPanelgetFocusedDecompilerPanel()Gets the display panel from the left or right side that has or last had focus.AddressSetViewgetLeftAddresses()Gets the addresses loaded in the left side of this panel.DecompilerPanelgetLeftDecompilerPanel()Gets the left side's decompiler panel.protected FieldPanelgetLeftFieldPanel()Gets the left field panel for this CodeComparisonPanel.CDisplayPanelgetLeftPanel()Gets the left side's C display panel.abstract java.lang.Class<? extends DecompilerCodeComparisonPanel<? extends FieldPanelCoordinator>>getPanelThisSupersedes()Determines if this panel is intended to take the place of another and if so it returns the class of the panel to be superseded.AddressSetViewgetRightAddresses()Gets the addresses loaded in the right side of this panel.DecompilerPanelgetRightDecompilerPanel()Gets the right side's decompiler panel.protected FieldPanelgetRightFieldPanel()Gets the right field panel for this CodeComparisonPanel.CDisplayPanelgetRightPanel()Gets the right side's C display panel.java.lang.StringgetTitle()The title for this code comparison component.booleanisMatchingConstantsExactly()protected voidleftDecompileDataSet(DecompileData decompileData)booleanleftPanelHasFocus()Determines if the left code panel currently has focus.voidloadAddresses(Program leftProgram, Program rightProgram, AddressSetView leftAddresses, AddressSetView rightAddresses)Displays program information for a particular set of addresses in the two programs being compared.voidloadData(Data leftData, Data rightData)Displays a comparison of two program's data items.voidloadFunctions(Function leftFunction, Function rightFunction)Displays a comparison of two program's functions.voidprogramRestored(Program program)Called when the indicated program has been restored because of an Undo/Redo.voidrefreshLeftPanel()Refreshes the left side of this panel.voidrefreshRightPanel()Refreshes the right side of this panel.booleanremoveDualDecompileResultsListener(DualDecompileResultsListener listener)Removes the indicated listener from being notified about decompile results.protected voidrightDecompileDataSet(DecompileData decompileData)voidsetBottomComponent(javax.swing.JComponent comp)Sets the component displayed in the bottom of this panel.voidsetFieldPanelCoordinator(DualDecompilerFieldPanelCoordinator fieldPanelCoordinator)Sets the coordinator for the two decompiler panels within this code comparison panel.voidsetHighlightControllers(ClangHighlightController leftHighlightController, ClangHighlightController rightHighlightController)Sets the highlight controllers for both decompiler panels.voidsetLeftTitle(java.lang.String leftTitle)Sets the title for the left side's decompiler.voidsetMouseNavigationEnabled(boolean enabled)Disable mouse navigation from within this dual decompiler panel.protected voidsetPrograms(Program leftProgram, Program rightProgram)Specifies the two programs to be compared by this panel.voidsetRightTitle(java.lang.String rightTitle)Sets the title for the right side's decompiler.voidsetTitlePrefixes(java.lang.String leftTitlePrefix, java.lang.String rightTitlePrefix)A CodeComparisonPanel should provide a title based on what the code comparison panel is displaying.voidsetTopComponent(javax.swing.JComponent comp)Sets the component displayed in the top of this panel.voidsetVisible(boolean aFlag)voidupdateActionEnablement()Updates the enablement for any actions created by this code comparison panel.-
Methods inherited from class ghidra.app.util.viewer.util.CodeComparisonPanel
focusLost, getFieldPanelCoordinator, getLeftData, getLeftFunction, getLeftProgram, getRightData, getRightFunction, getRightProgram, isScrollingSynced, setScrollingSyncState
-
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
-
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, unregisterKeyboardAction, update
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
-
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Constructor Detail
-
DecompilerCodeComparisonPanel
public DecompilerCodeComparisonPanel(java.lang.String owner, PluginTool tool)Creates a comparison panel with two decompilers.- Parameters:
owner- the owner of this paneltool- the tool displaying this panel
-
-
Method Detail
-
getComponent
public javax.swing.JComponent getComponent()
Description copied from class:CodeComparisonPanelThe GUI component for this CodeComparisonPanel. A CodeComparisonPanel provides a dual display with a left and right side for comparing some part of the code for two programs.- Specified by:
getComponentin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the component.
-
getTitle
public java.lang.String getTitle()
Description copied from class:CodeComparisonPanelThe title for this code comparison component.- Specified by:
getTitlein classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the title.
-
setVisible
public void setVisible(boolean aFlag)
- Overrides:
setVisiblein classjavax.swing.JComponent
-
setLeftTitle
public void setLeftTitle(java.lang.String leftTitle)
Sets the title for the left side's decompiler.- Parameters:
leftTitle- the title
-
setRightTitle
public void setRightTitle(java.lang.String rightTitle)
Sets the title for the right side's decompiler.- Parameters:
rightTitle- the title
-
isMatchingConstantsExactly
public boolean isMatchingConstantsExactly()
-
loadFunctions
public void loadFunctions(Function leftFunction, Function rightFunction)
Description copied from class:CodeComparisonPanelDisplays a comparison of two program's functions.- Specified by:
loadFunctionsin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
leftFunction- the function to show in the left side of the code comparison viewrightFunction- the function to show in the right side of the code comparison view
-
addDualDecompileResultsListener
public boolean addDualDecompileResultsListener(DualDecompileResultsListener listener)
Adds the indicated listener to be notified when the decompile results have completed.- Parameters:
listener- the listener- Returns:
- true if the listener was added.
-
removeDualDecompileResultsListener
public boolean removeDualDecompileResultsListener(DualDecompileResultsListener listener)
Removes the indicated listener from being notified about decompile results.- Parameters:
listener- the listener- Returns:
- true if the listener was removed.
-
setHighlightControllers
public void setHighlightControllers(ClangHighlightController leftHighlightController, ClangHighlightController rightHighlightController)
Sets the highlight controllers for both decompiler panels.- Parameters:
leftHighlightController- the left side's highlight controllerrightHighlightController- the right side's highlight controller
-
setFieldPanelCoordinator
public void setFieldPanelCoordinator(DualDecompilerFieldPanelCoordinator fieldPanelCoordinator)
Sets the coordinator for the two decompiler panels within this code comparison panel. It coordinates their scrolling and location synchronization.- Overrides:
setFieldPanelCoordinatorin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
fieldPanelCoordinator- the coordinator for the two decompiler panels
-
rightDecompileDataSet
protected void rightDecompileDataSet(DecompileData decompileData)
-
leftDecompileDataSet
protected void leftDecompileDataSet(DecompileData decompileData)
-
setTopComponent
public void setTopComponent(javax.swing.JComponent comp)
Sets the component displayed in the top of this panel.- Parameters:
comp- the component.
-
setBottomComponent
public void setBottomComponent(javax.swing.JComponent comp)
Sets the component displayed in the bottom of this panel.- Parameters:
comp- the component.
-
getFocusedDecompilerPanel
public CDisplayPanel getFocusedDecompilerPanel()
Gets the display panel from the left or right side that has or last had focus.- Returns:
- the last C display panel with focus
-
getLeftPanel
public CDisplayPanel getLeftPanel()
Gets the left side's C display panel.- Returns:
- the left C display panel
-
getRightPanel
public CDisplayPanel getRightPanel()
Gets the right side's C display panel.- Returns:
- the right C display panel
-
dispose
public void dispose()
Description copied from class:CodeComparisonPanelCleans up resources when this panel is no longer needed.- Specified by:
disposein classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>
-
focusGained
public void focusGained(java.awt.event.FocusEvent e)
-
setMouseNavigationEnabled
public void setMouseNavigationEnabled(boolean enabled)
Disable mouse navigation from within this dual decompiler panel.- Specified by:
setMouseNavigationEnabledin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
enabled- false disables navigation
-
setPrograms
protected void setPrograms(Program leftProgram, Program rightProgram)
Description copied from class:CodeComparisonPanelSpecifies the two programs to be compared by this panel.- Specified by:
setProgramsin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
leftProgram- the program for the left side.rightProgram- the program for the right side.
-
loadData
public void loadData(Data leftData, Data rightData)
Description copied from class:CodeComparisonPanelDisplays a comparison of two program's data items.- Specified by:
loadDatain classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
leftData- the data item to show in the left side of the code comparison viewrightData- the data item to show in the right side of the code comparison view
-
loadAddresses
public void loadAddresses(Program leftProgram, Program rightProgram, AddressSetView leftAddresses, AddressSetView rightAddresses)
Description copied from class:CodeComparisonPanelDisplays program information for a particular set of addresses in the two programs being compared.- Specified by:
loadAddressesin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
leftProgram- the program in the left side of the code comparison viewrightProgram- the program in the right side of the code comparison viewleftAddresses- the addresses of the program info to show in the left siderightAddresses- the addresses of the program info to show in the right side
-
getLeftDecompilerPanel
public DecompilerPanel getLeftDecompilerPanel()
Gets the left side's decompiler panel.- Returns:
- the left decompiler panel
-
getRightDecompilerPanel
public DecompilerPanel getRightDecompilerPanel()
Gets the right side's decompiler panel.- Returns:
- the right decompiler panel
-
updateActionEnablement
public void updateActionEnablement()
Description copied from class:CodeComparisonPanelUpdates the enablement for any actions created by this code comparison panel.- Specified by:
updateActionEnablementin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>
-
createActions
protected void createActions()
Creates the actions provided by this panel.
-
getActions
public DockingAction[] getActions()
Description copied from class:CodeComparisonPanelGet the actions for this CodeComparisonPanel.- Overrides:
getActionsin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- an array containing the actions
-
getPanelThisSupersedes
public abstract java.lang.Class<? extends DecompilerCodeComparisonPanel<? extends FieldPanelCoordinator>> getPanelThisSupersedes()
Description copied from class:CodeComparisonPanelDetermines if this panel is intended to take the place of another and if so it returns the class of the panel to be superseded.- Specified by:
getPanelThisSupersedesin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the class for the CodeComparisonPanel that this one supersedes or null if it doesn't supersede another panel.
-
getActionContext
public ActionContext getActionContext(ComponentProvider provider, java.awt.event.MouseEvent event)
Description copied from class:CodeComparisonPanelReturns the context object which corresponds to the area of focus within this provider's component. Null is returned when there is no context.- Specified by:
getActionContextin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
provider- the provider that includes this code comparison component.event- mouse event which corresponds to this request. May be null for key-stroke or other non-mouse event.- Returns:
- the action context for the area of focus in this component.
-
programRestored
public void programRestored(Program program)
Description copied from class:CodeComparisonPanelCalled when the indicated program has been restored because of an Undo/Redo. This method allows this CodeComparisonPanel to take an appropriate action (such as refreshing itself) to respond to the program changing.- Specified by:
programRestoredin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
program- the program that was restored.
-
refreshLeftPanel
public void refreshLeftPanel()
Refreshes the left side of this panel.- Specified by:
refreshLeftPanelin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>
-
refreshRightPanel
public void refreshRightPanel()
Refreshes the right side of this panel.- Specified by:
refreshRightPanelin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>
-
leftPanelHasFocus
public boolean leftPanelHasFocus()
Description copied from class:CodeComparisonPanelDetermines if the left code panel currently has focus.- Specified by:
leftPanelHasFocusin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- true if the left side of the code comparison has focus.
-
setTitlePrefixes
public void setTitlePrefixes(java.lang.String leftTitlePrefix, java.lang.String rightTitlePrefix)Description copied from class:CodeComparisonPanelA CodeComparisonPanel should provide a title based on what the code comparison panel is displaying. This method sets a prefix string that should be prepended to each of the code comparison panel's titles.- Specified by:
setTitlePrefixesin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Parameters:
leftTitlePrefix- the prefix string to prepend to the left panel's title.rightTitlePrefix- the prefix string to prepend to the right panel's title.
-
getLeftAddresses
public AddressSetView getLeftAddresses()
Description copied from class:CodeComparisonPanelGets the addresses loaded in the left side of this panel.- Specified by:
getLeftAddressesin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the addresses or an empty set
-
getRightAddresses
public AddressSetView getRightAddresses()
Description copied from class:CodeComparisonPanelGets the addresses loaded in the right side of this panel.- Specified by:
getRightAddressesin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the addresses or an empty set
-
getLeftFieldPanel
protected FieldPanel getLeftFieldPanel()
Description copied from class:CodeComparisonPanelGets the left field panel for this CodeComparisonPanel.- Specified by:
getLeftFieldPanelin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the left FieldPanel.
-
getRightFieldPanel
protected FieldPanel getRightFieldPanel()
Description copied from class:CodeComparisonPanelGets the right field panel for this CodeComparisonPanel.- Specified by:
getRightFieldPanelin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- the right FieldPanel.
-
createFieldPanelCoordinator
protected abstract DualDecompilerFieldPanelCoordinator createFieldPanelCoordinator()
Description copied from class:CodeComparisonPanelCreates a new FieldPanelCoordinator used to synchronize scrolling between the left and right view for this CodeComparisonPanel.- Specified by:
createFieldPanelCoordinatorin classCodeComparisonPanel<DualDecompilerFieldPanelCoordinator>- Returns:
- a new FieldPanelCoordinator
-
-