1414package org .eclipse .jdt .internal .ui .viewsupport .javadoc ;
1515
1616import java .util .Objects ;
17- import java .util .function .Supplier ;
1817import java .util .stream .Stream ;
1918
2019import org .eclipse .swt .widgets .Control ;
2726import org .eclipse .jface .action .ActionContributionItem ;
2827import org .eclipse .jface .action .IAction ;
2928import org .eclipse .jface .action .IMenuCreator ;
29+ import org .eclipse .jface .internal .text .html .BrowserInformationControlInput ;
30+
31+ import org .eclipse .jface .text .IInputChangedListener ;
3032
3133import org .eclipse .jdt .internal .ui .JavaPluginImages ;
3234import org .eclipse .jdt .internal .ui .viewsupport .JavaElementLinks ;
3335import org .eclipse .jdt .internal .ui .viewsupport .JavaElementLinks .IStylingConfigurationListener ;
34- import org .eclipse .jdt .internal .ui .viewsupport .browser .BrowserTextAccessor ;
35- import org .eclipse .jdt .internal .ui .viewsupport .browser .BrowserTextAccessor .IBrowserContentChangeListener ;
3636
3737/**
3838 * Toolbar item action for building & presenting javadoc styling menu.
3939 */
40- public class SignatureStylingMenuToolbarAction extends Action implements IMenuCreator , IBrowserContentChangeListener , IStylingConfigurationListener {
40+ public class SignatureStylingMenuToolbarAction extends Action implements IMenuCreator , IInputChangedListener , IStylingConfigurationListener {
4141 private final Action [] noStylingActions = { new NoStylingEnhancementsAction () };
4242 private final Action [] enabledActions ;
4343 private final Shell parent ;
@@ -46,36 +46,43 @@ public class SignatureStylingMenuToolbarAction extends Action implements IMenuCr
4646 private Action [] actions ;
4747 protected Menu menu = null ;
4848 private boolean enhancementsEnabled = JavaElementLinks .getStylingEnabledPreference ();
49+ private String javadocContent ;
4950
50- public SignatureStylingMenuToolbarAction (Shell parent , BrowserTextAccessor browserAccessor , Supplier < String > javadocContentSupplier , Runnable enhancementsReconfiguredTask ) {
51+ public SignatureStylingMenuToolbarAction (Shell parent , JavadocContentInputAccessor contentInputAccessor , Runnable enhancementsReconfiguredTask ) {
5152 super (JavadocStylingMessages .JavadocStyling_enabledTooltip , IAction .AS_DROP_DOWN_MENU );
5253 Objects .requireNonNull (parent );
54+ Objects .requireNonNull (contentInputAccessor );
5355 setImageDescriptor (JavaPluginImages .DESC_ETOOL_JDOC_HOVER_EDIT );
5456 // SignatureStylingColorSubMenuItem requires top level shell to display native color picker
55- // JavadocView passes to level shell but JavadocHover passes hover's shell
57+ // JavadocView passes top level shell but JavadocHover passes hover's shell
5658 // (Display.getActiveShell() would not work since JavadocView is created when active shell is startup splash screen shell)
5759 Shell topLevelShell = (parent .getParent () instanceof Shell parentShell ) ? parentShell : parent ;
5860 enabledActions = new Action [] {
5961 new ToggleSignatureTypeParametersColoringAction (),
60- new SignatureStylingColorSubMenuItem (topLevelShell , javadocContentSupplier )};
62+ new SignatureStylingColorSubMenuItem (topLevelShell , () -> this . javadocContent )};
6163 actions = noStylingActions ;
6264 setMenuCreator (this );
6365 this .parent = parent ;
6466 this .enhancementsReconfiguredTask = enhancementsReconfiguredTask ;
6567 presentEnhancementsState ();
6668 setHoverImageDescriptor (null );
6769 setId (SignatureStylingMenuToolbarAction .class .getSimpleName ());
68- browserAccessor . addContentChangedListener (this ); // remove not necessary since lifecycle of this action is the same as that of the browser widget
70+ contentInputAccessor . addInputChangedListener (this );
6971 JavaElementLinks .addStylingConfigurationListener (this );
7072 }
7173
7274 @ Override
73- public void browserContentChanged (Supplier <String > contentAccessor ) {
75+ public void inputChanged (Object newInput ) {
76+ javadocContent = null ;
7477 if (!enhancementsEnabled ) {
7578 return ;
7679 }
77- var content = contentAccessor .get ();
78- if (content != null && !content .isBlank () && JavaElementLinks .isStylingPresent (content )) {
80+ if (newInput instanceof String str ) {
81+ javadocContent = str ;
82+ } else if (newInput instanceof BrowserInformationControlInput bicInput ) {
83+ javadocContent = bicInput .getHtml ();
84+ }
85+ if (javadocContent != null && !javadocContent .isBlank () && JavaElementLinks .isStylingPresent (javadocContent )) {
7986 actions = enabledActions ;
8087 } else {
8188 actions = noStylingActions ;
@@ -127,7 +134,7 @@ public void stylingStateChanged(boolean isEnabled) {
127134 parent .getDisplay ().execute (() -> {
128135 enhancementsEnabled = isEnabled ;
129136 presentEnhancementsState ();
130- // even if enhancements switched from off to on, only browserContentChanged () sets enabledActions
137+ // even if enhancements switched from off to on, only inputChanged () sets enabledActions
131138 actions = noStylingActions ;
132139 runEnhancementsReconfiguredTask ();
133140 });
@@ -171,4 +178,8 @@ public void run() {
171178 }
172179
173180 }
181+
182+ public interface JavadocContentInputAccessor {
183+ void addInputChangedListener (IInputChangedListener changeListener );
184+ }
174185}
0 commit comments