[168408] JSP Highlighting is flaky
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java index 2c70ebe..60b4dd8 100644 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java +++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java
@@ -82,7 +82,14 @@ Color bgColor = ta.getBackground(); if (bgColor == null) bgColor = attr.getBackground(); - presentation.add(new StyleRange(offset, length, attr.getForeground(), bgColor, attr.getStyle())); + StyleRange result = new StyleRange(offset, length, attr.getForeground(), bgColor, attr.getStyle()); + if((attr.getStyle() & TextAttribute.STRIKETHROUGH) != 0) { + result.strikeout = true; + } + if((attr.getStyle() & TextAttribute.UNDERLINE) != 0) { + result.underline = true; + } + presentation.add(result); } /** @@ -99,7 +106,25 @@ RGB foreground = ColorHelper.toRGB(stylePrefs[0]); RGB background = ColorHelper.toRGB(stylePrefs[1]); boolean bold = Boolean.valueOf(stylePrefs[2]).booleanValue(); - getTextAttributes().put(colorKey, createTextAttribute(foreground, background, bold)); + boolean italic = Boolean.valueOf(stylePrefs[3]).booleanValue(); + boolean strikethrough = Boolean.valueOf(stylePrefs[4]).booleanValue(); + boolean underline = Boolean.valueOf(stylePrefs[5]).booleanValue(); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italic) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + TextAttribute createTextAttribute = createTextAttribute(foreground, background, style); + getTextAttributes().put(colorKey, createTextAttribute); } } } @@ -119,25 +144,89 @@ RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR); boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD); boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC); - ta = createTextAttribute(foreground, null, bold, italics); + boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_STRIKETHROUGH); + boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_UNDERLINE); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italics) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + ta = createTextAttribute(foreground, null, style); } else if (colorKey == IStyleConstantsJSPJava.JAVA_STRING) { // string RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_STRING_COLOR); boolean bold = store.getBoolean(PreferenceConstants.EDITOR_STRING_BOLD); boolean italics = store.getBoolean(PreferenceConstants.EDITOR_STRING_ITALIC); - ta = createTextAttribute(foreground, null, bold, italics); + boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_STRING_STRIKETHROUGH); + boolean underline = store.getBoolean(PreferenceConstants.EDITOR_STRING_UNDERLINE); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italics) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + ta = createTextAttribute(foreground, null, style); } else if (colorKey == IStyleConstantsJSPJava.JAVA_SINGLE_LINE_COMMENT) { // single line comment RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR); boolean bold = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD); boolean italics = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_ITALIC); - ta = createTextAttribute(foreground, null, bold, italics); + boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_STRIKETHROUGH); + boolean underline = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_UNDERLINE); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italics) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + ta = createTextAttribute(foreground, null, style); } else if (colorKey == IStyleConstantsJSPJava.JAVA_DEFAULT) { // default RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR); boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD); boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC); - ta = createTextAttribute(foreground, null, bold, italics); + boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_STRIKETHROUGH); + boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_UNDERLINE); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italics) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + ta = createTextAttribute(foreground, null, style); } if (ta != null) { getTextAttributes().put(colorKey, ta); @@ -145,16 +234,8 @@ } } } - - private TextAttribute createTextAttribute(RGB foreground, RGB background, boolean bold) { - return new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, bold ? SWT.BOLD : SWT.NORMAL); - } - private TextAttribute createTextAttribute(RGB foreground, RGB background, boolean bold, boolean italics) { - int style = bold ? SWT.BOLD : SWT.NORMAL; - if (italics) - style |= SWT.ITALIC; - + private TextAttribute createTextAttribute(RGB foreground, RGB background, int style) { return new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, style); } @@ -281,7 +362,6 @@ fScanner.setRange(document, lastStart, remainingLength); while (true) { - IToken token = fScanner.nextToken(); if (token.isEOF()) {
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java index 8f000a0..ca5844e 100644 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java +++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java
@@ -107,7 +107,25 @@ RGB foreground = ColorHelper.toRGB(stylePrefs[0]); RGB background = ColorHelper.toRGB(stylePrefs[1]); boolean bold = Boolean.valueOf(stylePrefs[2]).booleanValue(); - getTextAttributes().put(colorKey, createTextAttribute(foreground, background, bold)); + boolean italic = Boolean.valueOf(stylePrefs[3]).booleanValue(); + boolean strikethrough = Boolean.valueOf(stylePrefs[4]).booleanValue(); + boolean underline = Boolean.valueOf(stylePrefs[5]).booleanValue(); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italic) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + TextAttribute createTextAttribute = createTextAttribute(foreground, background, style); + getTextAttributes().put(colorKey, createTextAttribute); } } } @@ -127,13 +145,45 @@ RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR); boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD); boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC); - ta = createTextAttribute(foreground, null, bold, italics); + boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_STRIKETHROUGH); + boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_UNDERLINE); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italics) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + ta = createTextAttribute(foreground, null, style); } else if (colorKey == IStyleConstantsJSPEL.EL_DEFAULT) { // default RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR); boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD); boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC); - ta = createTextAttribute(foreground, null, bold, italics); + boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_STRIKETHROUGH); + boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_UNDERLINE); + int style = SWT.NORMAL; + if (bold) { + style = style | SWT.BOLD; + } + if (italics) { + style = style | SWT.ITALIC; + } + if (strikethrough) { + style = style | TextAttribute.STRIKETHROUGH; + } + if (underline) { + style = style | TextAttribute.UNDERLINE; + } + + ta = createTextAttribute(foreground, null, style); } if (ta != null) { getTextAttributes().put(colorKey, ta); @@ -141,16 +191,8 @@ } } } - - private TextAttribute createTextAttribute(RGB foreground, RGB background, boolean bold) { - return new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, bold ? SWT.BOLD : SWT.NORMAL); - } - - private TextAttribute createTextAttribute(RGB foreground, RGB background, boolean bold, boolean italics) { - int style = bold ? SWT.BOLD : SWT.NORMAL; - if (italics) - style |= SWT.ITALIC; - + + private TextAttribute createTextAttribute(RGB foreground, RGB background, int style) { return new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, style); }
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/ColorHelper.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/ColorHelper.java index 4e08fe2..77e67fb 100644 --- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/ColorHelper.java +++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/ColorHelper.java
@@ -14,11 +14,11 @@ -import com.ibm.icu.util.StringTokenizer; - import org.eclipse.swt.graphics.RGB; import org.eclipse.wst.sse.ui.internal.Logger; +import com.ibm.icu.util.StringTokenizer; + public class ColorHelper { public final static String BACKGROUND = "background";//$NON-NLS-1$ @@ -26,6 +26,7 @@ public final static String FOREGROUND = "foreground";//$NON-NLS-1$ public final static String NAME = "name";//$NON-NLS-1$ private final static String STYLE_SEPARATOR = "|"; //$NON-NLS-1$ + private final static String NULL = "null"; //$NON-NLS-1$ /** * Return an RGB String given the int r, g, b values @@ -64,7 +65,7 @@ styleString.append(s); } else { - styleString.append(Boolean.FALSE.toString()); + styleString.append(NULL); } } else { @@ -140,10 +141,20 @@ String[] stylePrefs = new String[6]; if (preference != null) { StringTokenizer st = new StringTokenizer(preference, STYLE_SEPARATOR); - String foreground = st.nextToken().trim(); - String background = st.nextToken().trim(); - stylePrefs[0] = foreground; - stylePrefs[1] = background; + if (st.hasMoreTokens()) { + String foreground = st.nextToken().trim(); + stylePrefs[0] = foreground; + } + else { + stylePrefs[0] = NULL; + } + if (st.hasMoreTokens()) { + String background = st.nextToken().trim(); + stylePrefs[1] = background; + } + else { + stylePrefs[1] = NULL; + } if (st.hasMoreTokens()) { String bold = st.nextToken().trim();
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/StyledTextColorPicker.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/StyledTextColorPicker.java index 006c5c0..6112076 100644 --- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/StyledTextColorPicker.java +++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/StyledTextColorPicker.java
@@ -45,7 +45,6 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; @@ -118,7 +117,7 @@ return; if (e.widget == fBold) { // get current (newly old) style - String prefString = getPreferenceStore().getString(getPreferenceKey(namedStyle)); + String prefString = getPreferenceStore().getString(namedStyle); String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); if (stylePrefs != null) { String oldValue = stylePrefs[2]; @@ -126,13 +125,13 @@ if (!newValue.equals(oldValue)) { stylePrefs[2] = newValue; String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getPreferenceStore().setValue(getPreferenceKey(namedStyle), newPrefString); + getPreferenceStore().setValue(namedStyle, newPrefString); refresh(); } } } else if (showItalic && e.widget == fItalic) { // get current (newly old) style - String prefString = getPreferenceStore().getString(getPreferenceKey(namedStyle)); + String prefString = getPreferenceStore().getString(namedStyle); String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); if (stylePrefs != null) { String oldValue = stylePrefs[3]; @@ -140,12 +139,12 @@ if (!newValue.equals(oldValue)) { stylePrefs[3] = newValue; String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getPreferenceStore().setValue(getPreferenceKey(namedStyle), newPrefString); + getPreferenceStore().setValue(namedStyle, newPrefString); refresh(); } } } else if (e.widget == fClearStyle) { - getPreferenceStore().setToDefault(getPreferenceKey(namedStyle)); + getPreferenceStore().setToDefault(namedStyle); refresh(); } } @@ -287,29 +286,6 @@ } } - private RGB changeColor(RGB startValue) { - ColorDialog colorDlg = new ColorDialog(getShell()); - if (startValue != null) - colorDlg.setRGB(startValue); - if(colorDlg.getText() == null || colorDlg.getText().length() == 0) - colorDlg.setText(SSEUIMessages.StyledTextColorPicker_0); - colorDlg.open(); - RGB newRGB = colorDlg.getRGB(); - if (newRGB != null) - return newRGB; - return startValue; - } - - private String changeColor(String rgb) { - String changedColor = "null"; //$NON-NLS-1$ - - RGB newColor = changeColor(ColorHelper.toRGB(rgb)); - // null check to see if using default value - if (newColor != null) - changedColor = ColorHelper.toRGBString(newColor); - return changedColor; - } - protected void close() { } @@ -438,17 +414,20 @@ if (event.getProperty().equals(ColorSelector.PROP_COLORCHANGE)) { // get current (newly old) style String namedStyle = getStyleName(fStyleCombo.getItem(fStyleCombo.getSelectionIndex())); - String prefString = getPreferenceStore().getString(getPreferenceKey(namedStyle)); + String prefString = getPreferenceStore().getString(namedStyle); String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); if (stylePrefs != null) { String oldValue = stylePrefs[0]; - // open color dialog to get new color - String newValue = changeColor(oldValue); + String newValue = "null"; //$NON-NLS-1$ + Object newValueObject = event.getNewValue(); + if (newValueObject instanceof RGB) { + newValue = ColorHelper.toRGBString((RGB)newValueObject); + } if (!newValue.equals(oldValue)) { stylePrefs[0] = newValue; String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getPreferenceStore().setValue(getPreferenceKey(namedStyle), newPrefString); + getPreferenceStore().setValue(namedStyle, newPrefString); refresh(); } } @@ -460,17 +439,21 @@ if (event.getProperty().equals(ColorSelector.PROP_COLORCHANGE)) { // get current (newly old) style String namedStyle = getStyleName(fStyleCombo.getItem(fStyleCombo.getSelectionIndex())); - String prefString = getPreferenceStore().getString(getPreferenceKey(namedStyle)); + String prefString = getPreferenceStore().getString(namedStyle); String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); if (stylePrefs != null) { String oldValue = stylePrefs[1]; - // open color dialog to get new color - String newValue = changeColor(oldValue); - + + String newValue = "null"; //$NON-NLS-1$ + Object newValueObject = event.getNewValue(); + if (newValueObject instanceof RGB) { + newValue = ColorHelper.toRGBString((RGB)newValueObject); + } + if (!newValue.equals(oldValue)) { stylePrefs[1] = newValue; String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getPreferenceStore().setValue(getPreferenceKey(namedStyle), newPrefString); + getPreferenceStore().setValue(namedStyle, newPrefString); refresh(); } } @@ -511,7 +494,7 @@ TextAttribute ta = new TextAttribute(getDefaultForeground(), getDefaultBackground(), SWT.NORMAL); if (namedStyle != null && getPreferenceStore() != null) { - String prefString = getPreferenceStore().getString(getPreferenceKey(namedStyle)); + String prefString = getPreferenceStore().getString(namedStyle); String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); if (stylePrefs != null) { RGB foreground = ColorHelper.toRGB(stylePrefs[0]); @@ -623,17 +606,6 @@ return fParser; } - /** - * @deprecated just key key (no need for generator) - */ - private String getPreferenceKey(String key) { - String newKey = key; -// if (fGeneratorKey != null) { -// newKey = PreferenceKeyGenerator.generateKey(key, fGeneratorKey); -// } - return newKey; - } - private IPreferenceStore getPreferenceStore() { return fPreferenceStore; }