Package ghidra.app.decompiler.component

# Class DecompilerPanel

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
ghidra.app.decompiler.component.DecompilerPanel

All Implemented Interfaces:
  `FieldLocationListener`, `FieldMouseListener`, `FieldSelectionListener`, `LayoutListener`, `ClangHighlightListener`, `ImageObserver`, `MenuContainer`, `Serializable`, `Accessible`

public class DecompilerPanel extends JPanel implements FieldMouseListener, FieldLocationListener, FieldSelectionListener, ClangHighlightListener, LayoutListener
Class to handle the display of a decompiled function

See Also:
  - Serialized Form

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class javax.swing.JPanel

  `JPanel.AccessibleJPanel`

  ## Nested classes/interfaces inherited from class javax.swing.JComponent

  `JComponent.AccessibleJComponent`

  ## Nested classes/interfaces inherited from class java.awt.Container

  `Container.AccessibleAWTContainer`

  ## Nested classes/interfaces inherited from class java.awt.Component

  `Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

- ## Field Summary

  ### 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`

  ### Fields inherited from class java.awt.Component

  `accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

  ### Fields inherited from interface java.awt.image.ImageObserver

  `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addHighlights(Set<PcodeOp> ops, Color hlColor)`
  `void`
  `addHighlights(Set<Varnode> varnodes, ColorProvider colorProvider)`
  `void`
  `addHoverService(DecompilerHoverService hoverService)`
  `void`
  `addMarginProvider(DecompilerMarginProvider provider)`
  `void`
  `addSecondaryHighlight(ClangToken token)`
  `void`
  `addSecondaryHighlight(ClangToken token, Color color)`
  `void`
  `buttonPressed(FieldLocation location, Field field, MouseEvent ev)`
  Called whenever the mouse button is pressed.
  `void`
  `clearPrimaryHighlights()`
  `void`
  `cloneHighlights(DecompilerPanel sourcePanel)`
  Called by the provider to clone all highlights in the source panel and apply them to this panel
  `boolean`
  `containsLocation(ProgramLocation location)`
  `ghidra.app.decompiler.component.ClangDecompilerHighlighter`
  `createHighlighter(CTokenHighlightMatcher tm)`
  `ghidra.app.decompiler.component.ClangDecompilerHighlighter`
  `createHighlighter(String id, CTokenHighlightMatcher tm)`
  `void`
  `dispose()`
  `void`
  `fieldLocationChanged(FieldLocation location, Field field, EventTrigger trigger)`
  Called whenever the cursor position changes.
  `List<ClangToken>`
  `findTokensByName(String name)`
  `ProgramLocation`
  `getCurrentLocation()`
  `Color`
  `getCurrentVariableHighlightColor()`
  `FieldLocation`
  `getCursorPosition()`
  `FieldPanel`
  `getFieldPanel()`
  `List<Field>`
  `getFields()`
  `FontMetrics`
  `getFontMetrics()`
  `ClangHighlightController`
  `getHighlightController()`
  `String`
  `getHighlightedText()`
  `DecompilerHighlighter`
  `getHighlighter(String id)`
  `TokenHighlights`
  `getHighlights(DecompilerHighlighter highligter)`
  `ClangLayoutController`
  `getLayoutController()`
  `int`
  `getLineNumber(int y)`
  Get the line number for the given y position, relative to the scroll panel
  `List<ClangLine>`
  `getLines()`
  `Color`
  `getMiddleMouseHighlightColor()`
  `DecompileOptions`
  `getOptions()`
  `ghidra.app.plugin.core.decompile.actions.FieldBasedSearchLocation`
  `getSearchResults()`
  `Color`
  `getSecondaryHighlight(ClangToken token)`
  `TokenHighlightColors`
  `getSecondaryHighlightColors()`
  `String`
  `getSelectedText()`
  `ClangToken`
  `getSelectedToken()`
  Returns a single selected token; null if there is no selection or multiple tokens selected.
  `Color`
  `getSpecialHighlightColor()`
  The color used in a primary highlight to mark the token that was clicked.
  `String`
  `getTextUnderCursor()`
  `ClangToken`
  `getTokenAtCursor()`
  `ViewerPosition`
  `getViewerPosition()`
  `void`
  `goToToken(ClangToken token)`
  `boolean`
  `hasSecondaryHighlight(ClangToken token)`
  `boolean`
  `hasSecondaryHighlights(Function function)`
  `boolean`
  `isHoverShowing()`
  `void`
  `layoutsChanged(List<AnchoredLayout> layouts)`
  `void`
  `optionsChanged(DecompileOptions decompilerOptions)`
  `void`
  `removeHoverService(DecompilerHoverService hoverService)`
  `void`
  `removeMarginProvider(DecompilerMarginProvider provider)`
  `void`
  `removeSecondaryHighlight(ClangToken token)`
  `void`
  `removeSecondaryHighlights(Function function)`
  Removes all secondary highlights for the current function
  `void`
  `requestFocus()`
  `SearchLocation`
  `searchText(String text, FieldLocation startLocation, boolean forwardDirection)`
  `SearchLocation`
  `searchTextRegex(String text, FieldLocation startLocation, boolean forwardDirection)`
  `void`
  `selectAll(EventTrigger trigger)`
  `void`
  `selectionChanged(FieldSelection selection, EventTrigger trigger)`
  Called whenever the FieldViewer selection changes.
  `void`
  `setBackground(Color bg)`
  `void`
  `setCursorPosition(FieldLocation fieldLocation)`
  `void`
  `setDecompilerHoverProvider(DecompilerHoverProvider provider)`
  `void`
  `setHighlightController(ClangHighlightController highlightController)`
  `void`
  `setHoverMode(boolean enabled)`
  `void`
  `setLocation(ProgramLocation location, ViewerPosition viewerPosition)`
  `void`
  `setSearchResults(SearchLocation searchLocation)`
  `void`
  `setViewerPosition(ViewerPosition viewerPosition)`
  `void`
  `tokenHighlightsChanged()`
  Method to invoke whenever the decompiler token highlights have changed.
  `void`
  `tokenRenamed(ClangToken token, String newName)`
  This function is used to alert the panel that a token was renamed.

  ### 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, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, 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`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Method Details

  - ### getLines

    public List<ClangLine> getLines()

  - ### getFields

    public List<Field> getFields()

  - ### getFieldPanel

    public FieldPanel getFieldPanel()

  - ### getSecondaryHighlightColors

    public TokenHighlightColors getSecondaryHighlightColors()

  - ### hasSecondaryHighlights

    public boolean hasSecondaryHighlights(Function function)

  - ### hasSecondaryHighlight

    public boolean hasSecondaryHighlight(ClangToken token)

  - ### getSecondaryHighlight

    public Color getSecondaryHighlight(ClangToken token)

  - ### getHighlights

    public TokenHighlights getHighlights(DecompilerHighlighter highligter)

  - ### removeSecondaryHighlights

    public void removeSecondaryHighlights(Function function)
    Removes all secondary highlights for the current function
    Parameters:
      `function` - the function containing the secondary highlights

  - ### removeSecondaryHighlight

    public void removeSecondaryHighlight(ClangToken token)

  - ### addSecondaryHighlight

    public void addSecondaryHighlight(ClangToken token)

  - ### addSecondaryHighlight

    public void addSecondaryHighlight(ClangToken token, Color color)

  - ### createHighlighter

    public ghidra.app.decompiler.component.ClangDecompilerHighlighter createHighlighter(CTokenHighlightMatcher tm)

  - ### createHighlighter

    public ghidra.app.decompiler.component.ClangDecompilerHighlighter createHighlighter(String id, CTokenHighlightMatcher tm)

  - ### getHighlighter

    public DecompilerHighlighter getHighlighter(String id)

  - ### clearPrimaryHighlights

    public void clearPrimaryHighlights()

  - ### addHighlights

    public void addHighlights(Set<Varnode> varnodes, ColorProvider colorProvider)

  - ### addHighlights

    public void addHighlights(Set<PcodeOp> ops, Color hlColor)

  - ### setHighlightController

    public void setHighlightController(ClangHighlightController highlightController)

  - ### getHighlightController

    public ClangHighlightController getHighlightController()

  - ### tokenHighlightsChanged

    public void tokenHighlightsChanged()
    Description copied from interface: `ClangHighlightListener`
    Method to invoke whenever the decompiler token highlights have changed.
    Specified by:
      `tokenHighlightsChanged` in interface `ClangHighlightListener`

  - ### tokenRenamed

    public void tokenRenamed(ClangToken token, String newName)
    This function is used to alert the panel that a token was renamed. If the token being renamed had a secondary highlight, we must re-apply the highlight to the new token.

    This is not needed for highlighter service highlights, since they get called again to re-apply highlights. It is up to that highlighter to determine if highlighting still applies to the new token name. Alternatively, for secondary highlights, we know the user chose the highlight based upon name. Thus, when the name changes, we need to take action to update the secondary highlight.

    Parameters:
      `token` - the token being renamed
      `newName` - the new name of the token

  - ### cloneHighlights

    public void cloneHighlights(DecompilerPanel sourcePanel)
    Called by the provider to clone all highlights in the source panel and apply them to this panel
    Parameters:
      `sourcePanel` - the panel that was cloned

  - ### setBackground

    public void setBackground(Color bg)
    Overrides:
      `setBackground` in class `JComponent`

  - ### getLayoutController

    public ClangLayoutController getLayoutController()

  - ### containsLocation

    public boolean containsLocation(ProgramLocation location)

  - ### setLocation

    public void setLocation(ProgramLocation location, ViewerPosition viewerPosition)

  - ### goToToken

    public void goToToken(ClangToken token)

  - ### setDecompilerHoverProvider

    public void setDecompilerHoverProvider(DecompilerHoverProvider provider)

  - ### dispose

    public void dispose()

  - ### getFontMetrics

    public FontMetrics getFontMetrics()

  - ### buttonPressed

    public void buttonPressed(FieldLocation location, Field field, MouseEvent ev)
    Description copied from interface: `FieldMouseListener`
    Called whenever the mouse button is pressed.
    Specified by:
      `buttonPressed` in interface `FieldMouseListener`
    Parameters:
      `location` - the field location of the mouse pointer
      `field` - the Field object that was clicked on
      `ev` - the mouse event that generated this call.

  - ### getCurrentLocation

    public ProgramLocation getCurrentLocation()

  - ### fieldLocationChanged

    public void fieldLocationChanged(FieldLocation location, Field field, EventTrigger trigger)
    Description copied from interface: `FieldLocationListener`
    Called whenever the cursor position changes.
    Specified by:
      `fieldLocationChanged` in interface `FieldLocationListener`
    Parameters:
      `location` - the new field location.
      `field` - the Field object containing the location.
      `trigger` - the type of the location change

  - ### selectionChanged

    public void selectionChanged(FieldSelection selection, EventTrigger trigger)
    Description copied from interface: `FieldSelectionListener`
    Called whenever the FieldViewer selection changes.
    Specified by:
      `selectionChanged` in interface `FieldSelectionListener`
    Parameters:
      `selection` - the new selection.
      `trigger` - indicates the cause of the selection changing

  - ### layoutsChanged

    public void layoutsChanged(List<AnchoredLayout> layouts)
    Specified by:
      `layoutsChanged` in interface `LayoutListener`

  - ### searchText

    public SearchLocation searchText(String text, FieldLocation startLocation, boolean forwardDirection)

  - ### searchTextRegex

    public SearchLocation searchTextRegex(String text, FieldLocation startLocation, boolean forwardDirection)

  - ### setSearchResults

    public void setSearchResults(SearchLocation searchLocation)

  - ### getSearchResults

    public ghidra.app.plugin.core.decompile.actions.FieldBasedSearchLocation getSearchResults()

  - ### getCurrentVariableHighlightColor

    public Color getCurrentVariableHighlightColor()

  - ### getMiddleMouseHighlightColor

    public Color getMiddleMouseHighlightColor()

  - ### getSpecialHighlightColor

    public Color getSpecialHighlightColor()
    The color used in a primary highlight to mark the token that was clicked. This is used in 'slice' actions to mark the source of the slice.
    Returns:
      the color

  - ### getHighlightedText

    public String getHighlightedText()

  - ### getTextUnderCursor

    public String getTextUnderCursor()

  - ### getSelectedText

    public String getSelectedText()

  - ### getCursorPosition

    public FieldLocation getCursorPosition()

  - ### setCursorPosition

    public void setCursorPosition(FieldLocation fieldLocation)

  - ### getSelectedToken

    public ClangToken getSelectedToken()
    Returns a single selected token; null if there is no selection or multiple tokens selected.
    Returns:
      a single selected token; null if there is no selection or multiple tokens selected.

  - ### getTokenAtCursor

    public ClangToken getTokenAtCursor()

  - ### getLineNumber

    public int getLineNumber(int y)
    Get the line number for the given y position, relative to the scroll panel

    If the y position is below all the lines, the last line is returned.

    Parameters:
      `y` - the y position
    Returns:
      the line number, or 0 if not applicable

  - ### getOptions

    public DecompileOptions getOptions()

  - ### addHoverService

    public void addHoverService(DecompilerHoverService hoverService)

  - ### removeHoverService

    public void removeHoverService(DecompilerHoverService hoverService)

  - ### setHoverMode

    public void setHoverMode(boolean enabled)

  - ### isHoverShowing

    public boolean isHoverShowing()

  - ### findTokensByName

    public List<ClangToken> findTokensByName(String name)

  - ### getViewerPosition

    public ViewerPosition getViewerPosition()

  - ### setViewerPosition

    public void setViewerPosition(ViewerPosition viewerPosition)

  - ### requestFocus

    public void requestFocus()
    Overrides:
      `requestFocus` in class `JComponent`

  - ### selectAll

    public void selectAll(EventTrigger trigger)

  - ### optionsChanged

    public void optionsChanged(DecompileOptions decompilerOptions)

  - ### addMarginProvider

    public void addMarginProvider(DecompilerMarginProvider provider)

  - ### removeMarginProvider

    public void removeMarginProvider(DecompilerMarginProvider provider)