[Text-UI] Improve type safety of token data of TextStyleManager
Follow-up-to: 7b9c6940ea4a784b401ff606d6fbc93360706f61
Change-Id: I4f7343981ee12709fa26d392e3be43e2d34e2a27
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractRuleBasedScanner.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractRuleBasedScanner.java
index 6f2dc67..2b4e57d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractRuleBasedScanner.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractRuleBasedScanner.java
@@ -19,10 +19,11 @@
import org.eclipse.jface.text.rules.BufferedRuleBasedScanner;
import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.ecommons.text.ui.presentation.TextStyleManager.TextStyleToken;
+
/**
* BufferedRuleBasedScanner with managed text styles/tokens.
@@ -31,10 +32,10 @@
public abstract class AbstractRuleBasedScanner extends BufferedRuleBasedScanner {
- private final TextStyleManager textStyles;
+ private final TextStyleManager<?> textStyles;
- public AbstractRuleBasedScanner(final TextStyleManager textStyles) {
+ public AbstractRuleBasedScanner(final TextStyleManager<?> textStyles) {
this.textStyles= textStyles;
}
@@ -48,7 +49,7 @@
protected abstract void createRules(final List<IRule> rules);
- protected IToken getToken(final String key) {
+ protected TextStyleToken<?> getToken(final String key) {
return this.textStyles.getToken(key);
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
index 1e0557c..82e04a1 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
@@ -531,7 +531,7 @@
private Button strikethroughCheckbox;
private Button underlineCheckbox;
- private PreferenceStoreTextStyleManager textStyles;
+ private PreferenceStoreTextStyleManager<TextAttribute> textStyles;
protected SourceViewer previewViewer;
private SourceEditorViewerConfiguration configuration;
@@ -725,7 +725,8 @@
}
protected abstract SourceEditorViewerConfiguration getSourceEditorViewerConfiguration(
- IPreferenceStore preferenceStore, PreferenceStoreTextStyleManager textStyles);
+ IPreferenceStore preferenceStore,
+ PreferenceStoreTextStyleManager<TextAttribute> textStyles);
protected abstract IDocumentSetupParticipant getDocumentSetupParticipant();
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/BasicTextStyleManager.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/BasicTextStyleManager.java
index b714947..634a2a1 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/BasicTextStyleManager.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/BasicTextStyleManager.java
@@ -17,17 +17,58 @@
import java.util.HashMap;
import java.util.Map;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
-
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
@NonNullByDefault
-public abstract class BasicTextStyleManager<TAttributes> implements TextStyleManager {
+public abstract class BasicTextStyleManager<TStyleData> implements TextStyleManager<TStyleData> {
- private final Map<String, Token> tokenMap= new HashMap<>();
+ protected static class BasicTextStyleToken<TStyleData> implements TextStyleToken<TStyleData> {
+
+
+ private TStyleData data;
+
+
+ public BasicTextStyleToken(final TStyleData data) {
+ this.data= data;
+ }
+
+
+ protected void setData(final TStyleData data) {
+ this.data= data;
+ }
+
+
+ @Override
+ public boolean isUndefined() {
+ return false;
+ }
+
+ @Override
+ public boolean isWhitespace() {
+ return false;
+ }
+
+ @Override
+ public boolean isEOF() {
+ return false;
+ }
+
+ @Override
+ public boolean isOther() {
+ return false;
+ }
+
+ @Override
+ public TStyleData getData() {
+ return this.data;
+ }
+
+ }
+
+
+ private final Map<String, BasicTextStyleToken<TStyleData>> tokenMap= new HashMap<>();
public BasicTextStyleManager() {
@@ -41,21 +82,21 @@
* @return token with text style attribute
*/
@Override
- public IToken getToken(final String key) {
- Token token= this.tokenMap.get(key);
+ public TextStyleToken<TStyleData> getToken(final String key) {
+ BasicTextStyleToken<TStyleData> token= this.tokenMap.get(key);
if (token == null) {
- token= new Token(createTextAttributes(key));
+ token= new BasicTextStyleToken<>(createStyleData(key));
this.tokenMap.put(key, token);
}
return token;
}
- protected abstract TAttributes createTextAttributes(String key);
+ protected abstract TStyleData createStyleData(String key);
protected void updateTextStyles() {
- for (final Map.Entry<String, Token> token : this.tokenMap.entrySet()) {
- token.getValue().setData(createTextAttributes(token.getKey()));
+ for (final var token : this.tokenMap.entrySet()) {
+ token.getValue().setData(createStyleData(token.getKey()));
}
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/FixTokenScanner.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/FixTokenScanner.java
index 9097d79..a4b3e0c 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/FixTokenScanner.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/FixTokenScanner.java
@@ -30,7 +30,7 @@
public class FixTokenScanner implements ITokenScanner {
- private final TextStyleManager textStyles;
+ private final TextStyleManager<?> textStyles;
private final IToken defaultToken;
private ImList<ITypedRegion> styleRegions;
@@ -44,7 +44,7 @@
private int tokenLength;
- public FixTokenScanner(final TextStyleManager textStyles, final String defaultTokenKey) {
+ public FixTokenScanner(final TextStyleManager<?> textStyles, final String defaultTokenKey) {
this.textStyles= textStyles;
this.defaultToken= textStyles.getToken(defaultTokenKey);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/SingleTokenScanner.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/SingleTokenScanner.java
index 1f244a6..8235ba6 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/SingleTokenScanner.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/SingleTokenScanner.java
@@ -29,7 +29,7 @@
private static final byte DEFAULT= 1;
- private final TextStyleManager textStyles;
+ private final TextStyleManager<?> textStyles;
private final IToken defaultToken;
@@ -39,7 +39,7 @@
private byte state;
- public SingleTokenScanner(final TextStyleManager textStyles, final String defaultTokenKey) {
+ public SingleTokenScanner(final TextStyleManager<?> textStyles, final String defaultTokenKey) {
this.textStyles= textStyles;
this.defaultToken= this.textStyles.getToken(defaultTokenKey);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/TextStyleManager.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/TextStyleManager.java
index 2b905c0..fc20024 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/TextStyleManager.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/TextStyleManager.java
@@ -20,7 +20,16 @@
@NonNullByDefault
-public interface TextStyleManager {
+public interface TextStyleManager<TStyleData> {
+
+
+ public interface TextStyleToken<TStyleData> extends IToken {
+
+
+ @Override
+ public TStyleData getData();
+
+ }
/**
@@ -29,7 +38,7 @@
* @param key id and prefix for preference keys
* @return token with text style attribute
*/
- public IToken getToken(String key);
+ public TextStyleToken<TStyleData> getToken(String key);
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/CssTextStyleManager.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/CssTextStyleManager.java
index 957f22b..22f03fe 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/CssTextStyleManager.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/CssTextStyleManager.java
@@ -65,8 +65,14 @@
}
+ @SuppressWarnings("null")
+ public TextStyleToken<String> getRootStyleToken() {
+ return getToken(ROOT_STYLE_KEY);
+ }
+
+
@Override
- protected @Nullable String createTextAttributes(String key) {
+ protected @Nullable String createStyleData(String key) {
if (key != ROOT_STYLE_KEY) {
key= resolveUsedKey(key);
if (key.equals(this.defaultStyleKey)) {
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/JFaceTextStyleManager.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/JFaceTextStyleManager.java
index fa7cfe2..abed68e 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/JFaceTextStyleManager.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/JFaceTextStyleManager.java
@@ -37,7 +37,7 @@
@Override
- protected TextAttribute createTextAttributes(String key) {
+ protected TextAttribute createStyleData(String key) {
key= resolveUsedKey(key);
final RGB rgb= PreferenceConverter.getColor(this.preferenceStore, key + ITextPresentationConstants.TEXTSTYLE_COLOR_SUFFIX);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/PreferenceStoreTextStyleManager.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/PreferenceStoreTextStyleManager.java
index 6e96b8d..0baedf8 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/PreferenceStoreTextStyleManager.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/settings/PreferenceStoreTextStyleManager.java
@@ -20,6 +20,7 @@
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.ecommons.preferences.SettingsChangeNotifier.ManageListener;
import org.eclipse.statet.ecommons.text.ui.presentation.BasicTextStyleManager;
@@ -66,14 +67,15 @@
* @since 3.0
*/
@Override
- protected abstract TAttributes createTextAttributes(String key);
+ protected abstract TAttributes createStyleData(String key);
public boolean affectsTextPresentation(final Set<String> groupIds) {
return (groupIds.contains(this.stylesGroupId));
}
- public void handleSettingsChanged(final Set<String> groupIds, final Map<String, Object> options) {
+ public void handleSettingsChanged(final Set<String> groupIds,
+ final @Nullable Map<String, Object> options) {
if (affectsTextPresentation(groupIds)) {
updateTextStyles();
if (options != null) {
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceEditorViewerConfiguration.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceEditorViewerConfiguration.java
index ee59a02..a5a437d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceEditorViewerConfiguration.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceEditorViewerConfiguration.java
@@ -45,6 +45,7 @@
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITextViewerExtension2;
+import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.information.IInformationPresenter;
import org.eclipse.jface.text.information.IInformationProvider;
@@ -173,7 +174,7 @@
private final SourceEditor editor;
- private PreferenceStoreTextStyleManager textStyles;
+ private PreferenceStoreTextStyleManager<TextAttribute> textStyles;
private final CopyOnWriteIdentityListSet<ISettingsChangedHandler> settingsHandler= new CopyOnWriteIdentityListSet<>();
private Map<String, ITokenScanner> scanners;
@@ -218,11 +219,11 @@
protected void initTextStyles() {
}
- protected void setTextStyles(final PreferenceStoreTextStyleManager textStyles) {
+ protected void setTextStyles(final PreferenceStoreTextStyleManager<TextAttribute> textStyles) {
this.textStyles= textStyles;
}
- protected TextStyleManager getTextStyles() {
+ protected TextStyleManager<TextAttribute> getTextStyles() {
if (this.textStyles == null) {
initTextStyles();
}