Class ClangHighlightController
- java.lang.Object
-
- ghidra.app.decompiler.component.ClangHighlightController
-
- Direct Known Subclasses:
LocationClangHighlightController,NullClangHighlightController
public abstract class ClangHighlightController extends java.lang.ObjectClass to handle highlights for a decompiled function.This class does not painting directly. Rather, this class tracks the currently highlighted tokens and then sets the highlight color on the token when it is highlighted and clears the highlight color when the highlight is removed.
This class maintains the notion of 'primary' highlights and 'secondary' highlights. Primary highlights are considered transient and get cleared whenever the location changes. Secondary highlights will stay until they are manually cleared by a user action. Primary highlights happen when the user clicks around the Decompiler. They show state such as the current field, impact of a variable (via a slicing action), or related syntax (such as matching braces). Secondary highlights are triggered by the user to show all occurrences of a particular variable. Further, the user can apply multiple secondary highlights at the same time, with different colors for each highlight.
-
-
Field Summary
Fields Change Modifier and Type Field Description NEW static java.awt.ColorDEFAULT_HIGHLIGHT_COLORprotected java.awt.ColordefaultHighlightColorprotected java.awt.ColordefaultParenColorREMOVED defaultNonFunctionBackgroundColor() (Removed)REMOVED defaultSpecialColor() (Removed)REMOVED highlightTokenSet() (Removed)REMOVED highlightListenerList() (Removed)
-
Constructor Summary
Constructors Change Constructor Description ClangHighlightController()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Change Modifier and Type Method Description voidaddHighlightBrace(ClangSyntaxToken token, java.awt.Color highlightColor)MODIFIED voidaddListener(ClangHighlightListener listener)NEW protected voidaddPrimaryHighlight(ClangToken token, java.awt.Color highlightColor)NEW voidaddPrimaryHighlights(ClangNode parentNode, ghidra.app.plugin.core.decompile.actions.TokenHighlightColorProvider colorProvider)voidaddPrimaryHighlights(ClangNode parentNode, java.util.Set<PcodeOp> ops, java.awt.Color hlColor)voidaddPrimaryHighlights(java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens, java.awt.Color hlColor)NEW protected java.util.List<ClangToken>addPrimaryHighlightToTokensForParenthesis(ClangSyntaxToken tok, java.awt.Color highlightColor)If input token is a parenthesis, highlight all tokens between it and its matchvoidaddSecondaryHighlights(java.lang.String tokenText, java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens)voidaddSecondaryHighlights(java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens, java.awt.Color hlColor)NEW voidclearAllHighlights()NEW voidclearPrimaryHighlights()NEW static ClangHighlightControllerdummyIfNull(ClangHighlightController c)abstract voidfieldLocationChanged(FieldLocation location, Field field, EventTrigger trigger)NEW java.awt.ColorgetCombinedColor(ClangToken t)java.lang.StringgetHighlightedText()NEW TokenHighlightsgetPrimaryHighlightedTokens()NEW TokenHighlightColorsgetSecondaryHighlightColors()NEW TokenHighlightsgetSecondaryHighlightedTokens()NEW java.util.Set<HighlightToken>getSecondaryHighlightsByFunction(Function f)NEW longgetUpdateId()NEW booleanhasPrimaryHighlight(ClangToken token)NEW booleanhasSecondaryHighlight(ClangToken token)protected voidnotifyListeners()MODIFIED voidremoveListener(ClangHighlightListener listener)NEW voidremoveSecondaryHighlights(ClangToken token)NEW voidremoveSecondaryHighlights(Function f)voidremoveSecondaryHighlights(java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens)voidtogglePrimaryHighlights(java.awt.Color hlColor, java.util.function.Supplier<java.util.List<ClangToken>> tokens)REMOVED voidsetDefaultHighlightColor(Color highlightColor) (Removed)REMOVED voidsetDefaultSpecialColor(Color specialColor) (Removed)REMOVED voidsetDefaultParenColor(Color parenColor) (Removed)REMOVED ColorgetDefaultHighlightColor() (Removed)REMOVED ColorgetDefaultSpecialColor() (Removed)REMOVED ColorgetDefaultParenColor() (Removed)REMOVED voidclearHighlights() (Removed)REMOVED voidaddHighlight(ClangToken clangToken, Color highlightColor) (Removed)REMOVED voiddoAddHighlight(ClangToken clangToken, Color highlightColor) (Removed)REMOVED voidclearHighlight(ClangToken clangToken) (Removed)REMOVED booleanisHighlighted(ClangToken clangToken) (Removed)REMOVED List<ClangToken>addHighlightParen(ClangSyntaxToken tok, Color highlightColor) (Removed)REMOVED voidaddHighlightFill() (Removed)
-
-
-
Method Detail
-
dummyIfNull NEW
public static ClangHighlightController dummyIfNull(ClangHighlightController c)
-
fieldLocationChanged
public abstract void fieldLocationChanged(FieldLocation location, Field field, EventTrigger trigger)
-
getHighlightedText
public java.lang.String getHighlightedText()
-
getSecondaryHighlightColors NEW
public TokenHighlightColors getSecondaryHighlightColors()
-
getPrimaryHighlightedTokens NEW
public TokenHighlights getPrimaryHighlightedTokens()
-
getSecondaryHighlightedTokens NEW
public TokenHighlights getSecondaryHighlightedTokens()
-
togglePrimaryHighlights
public void togglePrimaryHighlights(java.awt.Color hlColor, java.util.function.Supplier<java.util.List<ClangToken>> tokens)
-
hasPrimaryHighlight NEW
public boolean hasPrimaryHighlight(ClangToken token)
-
hasSecondaryHighlight NEW
public boolean hasSecondaryHighlight(ClangToken token)
-
getSecondaryHighlightsByFunction NEW
public java.util.Set<HighlightToken> getSecondaryHighlightsByFunction(Function f)
-
removeSecondaryHighlights NEW
public void removeSecondaryHighlights(Function f)
-
removeSecondaryHighlights NEW
public void removeSecondaryHighlights(ClangToken token)
-
removeSecondaryHighlights
public void removeSecondaryHighlights(java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens)
-
addSecondaryHighlights
public void addSecondaryHighlights(java.lang.String tokenText, java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens)
-
addSecondaryHighlights
public void addSecondaryHighlights(java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens, java.awt.Color hlColor)
-
addPrimaryHighlights
public void addPrimaryHighlights(java.util.function.Supplier<? extends java.util.Collection<ClangToken>> tokens, java.awt.Color hlColor)
-
addPrimaryHighlights NEW
public void addPrimaryHighlights(ClangNode parentNode, ghidra.app.plugin.core.decompile.actions.TokenHighlightColorProvider colorProvider)
-
addPrimaryHighlights
public void addPrimaryHighlights(ClangNode parentNode, java.util.Set<PcodeOp> ops, java.awt.Color hlColor)
-
addPrimaryHighlight NEW
protected void addPrimaryHighlight(ClangToken token, java.awt.Color highlightColor)
-
getCombinedColor NEW
public java.awt.Color getCombinedColor(ClangToken t)
-
addPrimaryHighlightToTokensForParenthesis NEW
protected java.util.List<ClangToken> addPrimaryHighlightToTokensForParenthesis(ClangSyntaxToken tok, java.awt.Color highlightColor)
If input token is a parenthesis, highlight all tokens between it and its match- Parameters:
tok- potential parenthesis tokenhighlightColor- the highlight color- Returns:
- a list of all tokens that were highlighted.
-
addHighlightBrace
public void addHighlightBrace(ClangSyntaxToken token, java.awt.Color highlightColor)
-
addListener MODIFIED
return type: boolean → void-boolean addListener(ghidra.app.decompiler.component.ClangHighlightListener listener)+void addListener(ghidra.app.decompiler.component.ClangHighlightListener listener)public void addListener(ClangHighlightListener listener)
-
removeListener MODIFIED
return type: boolean → void-boolean removeListener(ghidra.app.decompiler.component.ClangHighlightListener listener)+void removeListener(ghidra.app.decompiler.component.ClangHighlightListener listener)public void removeListener(ClangHighlightListener listener)
-
notifyListeners
protected void notifyListeners()
-
-