Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/style/ReconcilerHighlighter.java')
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/style/ReconcilerHighlighter.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/style/ReconcilerHighlighter.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/style/ReconcilerHighlighter.java
new file mode 100644
index 0000000000..1a39d4b7ae
--- /dev/null
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/provisional/style/ReconcilerHighlighter.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *
+ *******************************************************************************/
+package org.eclipse.wst.sse.ui.internal.provisional.style;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.ui.internal.ExtendedConfigurationBuilder;
+import org.eclipse.wst.sse.ui.internal.Logger;
+
+public class ReconcilerHighlighter {
+
+ private static final String LINE_STYLE_PROVIDER_EXTENDED_ID = Highlighter.LINE_STYLE_PROVIDER_EXTENDED_ID;
+
+ private Map fTableOfProviders = null;
+
+ private Map fExtendedProviders = null;
+
+ private ITextViewer fTextViewer = null;
+
+ private final static boolean _trace = Boolean.valueOf(Platform.getDebugOption("org.eclipse.wst.sse.ui/structuredPresentationReconciler")).booleanValue(); //$NON-NLS-1$
+ private final static String TRACE_PREFIX = "StructuredPresentationReconciler: "; //$NON-NLS-1$
+ private long time0;
+
+ /**
+ * instance for older LineStyleProviders loaded by extension point,
+ * created if needed
+ */
+ private CompatibleHighlighter fCompatibleHighlighter = null;
+
+ public void refreshDisplay() {
+ if (_trace) {
+ time0 = System.currentTimeMillis();
+ }
+ if (fTextViewer != null)
+ fTextViewer.invalidateTextPresentation();
+ if (_trace) {
+ System.out.println(TRACE_PREFIX + "ReconcilerHighlighter refreshDisplay took " + (System.currentTimeMillis() - time0) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+ System.out.flush();
+ }
+ }
+
+ /**
+ * Registers a given line style provider for a particular partition type.
+ * If there is already a line style provider registered for this type, the
+ * new line style provider is registered instead of the old one.
+ *
+ * @param partitionType
+ * the partition type under which to register
+ * @param the
+ * line style provider to register, or <code>null</code> to
+ * remove an existing one
+ */
+ public void addProvider(String partitionType, LineStyleProvider provider) {
+ getTableOfProviders().put(partitionType, provider);
+ }
+
+ public void removeProvider(String partitionType) {
+ getTableOfProviders().remove(partitionType);
+ }
+
+ public LineStyleProvider getProvider(String partitionType) {
+ LineStyleProvider result = (LineStyleProvider) getTableOfProviders().get(partitionType);
+
+ // The provider was not within the default set of providers. Use the
+ // extended configuration
+ // to look up additional providers
+ if (result == null) {
+ // NOT YET FINALIZED - DO NOT CONSIDER AS API
+ synchronized (getExtendedProviders()) {
+ if (!getExtendedProviders().containsKey(partitionType)) {
+ result = (LineStyleProvider) ExtendedConfigurationBuilder.getInstance().getConfiguration(LINE_STYLE_PROVIDER_EXTENDED_ID, partitionType);
+ getExtendedProviders().put(partitionType, result);
+
+ if (result != null && fTextViewer != null && fTextViewer.getDocument() instanceof IStructuredDocument) {
+ if (result instanceof AbstractLineStyleProvider) {
+ ((AbstractLineStyleProvider) result).init((IStructuredDocument) fTextViewer.getDocument(), this);
+ }
+ else {
+ Logger.log(Logger.INFO_DEBUG, "CompatibleHighlighter installing compatibility for " + result.getClass()); //$NON-NLS-1$
+ if (fCompatibleHighlighter == null) {
+ fCompatibleHighlighter = new CompatibleHighlighter();
+ fCompatibleHighlighter.install(fTextViewer);
+ }
+ result.init((IStructuredDocument) fTextViewer.getDocument(), fCompatibleHighlighter);
+ }
+ }
+ }
+ else {
+ result = (LineStyleProvider) getExtendedProviders().get(partitionType);
+ }
+ }
+ }
+ return result;
+ }
+
+ private Map getTableOfProviders() {
+ if (fTableOfProviders == null) {
+ fTableOfProviders = new HashMap();
+ }
+ return fTableOfProviders;
+ }
+
+ private Map getExtendedProviders() {
+ if (fExtendedProviders == null) {
+ fExtendedProviders = new HashMap(3);
+ }
+ return fExtendedProviders;
+ }
+
+ public void install(ITextViewer textViewer) {
+ fTextViewer = textViewer;
+ if (fCompatibleHighlighter != null) {
+ fCompatibleHighlighter.uninstall();
+ fCompatibleHighlighter.install(fTextViewer);
+ }
+ refreshDisplay();
+ }
+
+ public void uninstall() {
+ Iterator it = getTableOfProviders().values().iterator();
+
+ while (it.hasNext()) {
+ LineStyleProvider provider = (LineStyleProvider) it.next();
+ if (provider != null)
+ provider.release();
+ }
+
+ it = getExtendedProviders().values().iterator();
+ while (it.hasNext()) {
+ LineStyleProvider provider = (LineStyleProvider) it.next();
+ if (provider != null)
+ provider.release();
+ }
+
+ getTableOfProviders().clear();
+ getExtendedProviders().clear();
+ fTableOfProviders = null;
+ if (fCompatibleHighlighter != null) {
+ fCompatibleHighlighter.uninstall();
+ }
+ fTextViewer = null;
+ }
+}

Back to the top