Search in sources :

Example 1 with AbstractLineStyleProvider

use of org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider in project webtools.sourceediting by eclipse.

the class StructuredTextViewer method configure.

/**
 * Should be identical to superclass version. Plus, we get our own special
 * Highlighter. Plus we uninstall before installing.
 */
public void configure(SourceViewerConfiguration configuration) {
    if (getTextWidget() == null)
        return;
    setDocumentPartitioning(configuration.getConfiguredDocumentPartitioning(this));
    // always uninstall highlighter and null it out on new configuration
    if (fHighlighter != null) {
        fHighlighter.uninstall();
        fHighlighter = null;
    }
    if (fRecHighlighter != null) {
        fRecHighlighter.uninstall();
        fRecHighlighter = null;
    }
    // Bug 230297 - Uninstall presentation reconciler in preparation of a new one
    if (fPresentationReconciler != null) {
        fPresentationReconciler.uninstall();
        fPresentationReconciler = null;
    }
    IReconciler newReconciler = configuration.getReconciler(this);
    if (newReconciler != fReconciler || newReconciler == null || fReconciler == null) {
        if (fReconciler != null) {
            fReconciler.uninstall();
        }
        fReconciler = newReconciler;
        if (fReconciler != null) {
            fReconciler.install(this);
            // still need set document on the reconciler (strategies)
            if (fReconciler instanceof StructuredRegionProcessor)
                ((StructuredRegionProcessor) fReconciler).setDocument(getDocument());
        }
    }
    IContentAssistant newAssistant = configuration.getContentAssistant(this);
    if (newAssistant != fContentAssistant || newAssistant == null || fContentAssistant == null) {
        if (fContentAssistant != null)
            fContentAssistant.uninstall();
        fContentAssistant = newAssistant;
        if (fContentAssistant != null) {
            fContentAssistant.install(this);
            if (fContentAssistant instanceof IContentAssistantExtension2 && fContentAssistant instanceof IContentAssistantExtension4)
                fContentAssistantFacade = new ContentAssistantFacade(fContentAssistant);
            fContentAssistantInstalled = true;
        } else {
            // 248036
            // disable the content assist operation if no content
            // assistant
            enableOperation(CONTENTASSIST_PROPOSALS, false);
            fContentAssistantInstalled = false;
        }
    }
    IQuickAssistAssistant quickAssistant = configuration.getQuickAssistAssistant(this);
    if (quickAssistant != fQuickAssistAssistant || quickAssistant == null || fQuickAssistAssistant == null) {
        if (fQuickAssistAssistant != null)
            fQuickAssistAssistant.uninstall();
        fQuickAssistAssistant = quickAssistant;
        if (fQuickAssistAssistant != null) {
            fQuickAssistAssistant.install(this);
            fQuickAssistAssistantInstalled = true;
        } else {
            // 248036
            // disable the content assist operation if no content
            // assistant
            enableOperation(QUICK_ASSIST, false);
            fQuickAssistAssistantInstalled = false;
        }
    }
    fContentFormatter = configuration.getContentFormatter(this);
    // do not uninstall old information presenter if it's the same
    IInformationPresenter newInformationPresenter = configuration.getInformationPresenter(this);
    if (newInformationPresenter == null || fInformationPresenter == null || !(newInformationPresenter.equals(fInformationPresenter))) {
        if (fInformationPresenter != null)
            fInformationPresenter.uninstall();
        fInformationPresenter = newInformationPresenter;
        if (fInformationPresenter != null)
            fInformationPresenter.install(this);
    }
    // disconnect from the old undo manager before setting the new one
    if (fUndoManager != null) {
        fUndoManager.disconnect();
    }
    setUndoManager(configuration.getUndoManager(this));
    // release old annotation hover before setting new one
    if (fAnnotationHover instanceof StructuredTextAnnotationHover) {
        ((StructuredTextAnnotationHover) fAnnotationHover).release();
    }
    setAnnotationHover(configuration.getAnnotationHover(this));
    // release old annotation hover before setting new one
    if (fOverviewRulerAnnotationHover instanceof StructuredTextAnnotationHover) {
        ((StructuredTextAnnotationHover) fOverviewRulerAnnotationHover).release();
    }
    setOverviewRulerAnnotationHover(configuration.getOverviewRulerAnnotationHover(this));
    getTextWidget().setTabs(configuration.getTabWidth(this));
    setHoverControlCreator(configuration.getInformationControlCreator(this));
    // if hyperlink manager has already been created, uninstall it
    if (fHyperlinkManager != null) {
        setHyperlinkDetectors(null, SWT.NONE);
    }
    setHyperlinkPresenter(configuration.getHyperlinkPresenter(this));
    IHyperlinkDetector[] hyperlinkDetectors = configuration.getHyperlinkDetectors(this);
    int eventStateMask = configuration.getHyperlinkStateMask(this);
    setHyperlinkDetectors(hyperlinkDetectors, eventStateMask);
    String[] types = configuration.getConfiguredContentTypes(this);
    // clear autoindent/autoedit strategies
    fAutoIndentStrategies = null;
    for (int i = 0; i < types.length; i++) {
        String t = types[i];
        setAutoEditStrategies(configuration.getAutoEditStrategies(this, t), t);
        setTextDoubleClickStrategy(configuration.getDoubleClickStrategy(this, t), t);
        int[] stateMasks = configuration.getConfiguredTextHoverStateMasks(this, t);
        if (stateMasks != null) {
            for (int j = 0; j < stateMasks.length; j++) {
                int stateMask = stateMasks[j];
                setTextHover(configuration.getTextHover(this, t, stateMask), t, stateMask);
            }
        } else {
            setTextHover(configuration.getTextHover(this, t), t, ITextViewerExtension2.DEFAULT_HOVER_STATE_MASK);
        }
        String[] prefixes = configuration.getIndentPrefixes(this, t);
        if (prefixes != null && prefixes.length > 0)
            setIndentPrefixes(prefixes, t);
        prefixes = configuration.getDefaultPrefixes(this, t);
        if (prefixes != null && prefixes.length > 0)
            setDefaultPrefixes(prefixes, t);
        // the document is set
        if (getDocument() != null) {
            // add highlighter/linestyleprovider
            LineStyleProvider[] providers = ((StructuredTextViewerConfiguration) configuration).getLineStyleProviders(this, t);
            if (providers != null) {
                for (int j = 0; j < providers.length; ++j) {
                    if (fRecHighlighter == null) {
                        fRecHighlighter = new ReconcilerHighlighter();
                        ((StructuredTextViewerConfiguration) configuration).setHighlighter(fRecHighlighter);
                    }
                    if (providers[j] instanceof AbstractLineStyleProvider) {
                        ((AbstractLineStyleProvider) providers[j]).init((IStructuredDocument) getDocument(), fRecHighlighter);
                        fRecHighlighter.addProvider(t, providers[j]);
                    } else {
                        // init with compatibility instance
                        if (fHighlighter == null) {
                            fHighlighter = new CompatibleHighlighter();
                        }
                        // $NON-NLS-1$
                        Logger.log(Logger.INFO_DEBUG, "CompatibleHighlighter installing compatibility for " + providers[j].getClass());
                        providers[j].init((IStructuredDocument) getDocument(), fHighlighter);
                        fHighlighter.addProvider(t, providers[j]);
                    }
                }
            }
        }
    }
    // initialize highlighter after linestyleproviders were added
    if (fHighlighter != null) {
        fHighlighter.setDocumentPartitioning(configuration.getConfiguredDocumentPartitioning(this));
        fHighlighter.setDocument((IStructuredDocument) getDocument());
        fHighlighter.install(this);
    }
    if (fRecHighlighter != null)
        fRecHighlighter.install(this);
    activatePlugins();
    fConfiguration = configuration;
    // Update the viewer's presentation reconciler
    fPresentationReconciler = configuration.getPresentationReconciler(this);
    if (fPresentationReconciler != null)
        fPresentationReconciler.install(this);
}
Also used : ReconcilerHighlighter(org.eclipse.wst.sse.ui.internal.provisional.style.ReconcilerHighlighter) StructuredRegionProcessor(org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor) IHyperlinkDetector(org.eclipse.jface.text.hyperlink.IHyperlinkDetector) CompatibleHighlighter(org.eclipse.wst.sse.ui.internal.provisional.style.CompatibleHighlighter) AbstractLineStyleProvider(org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider) Point(org.eclipse.swt.graphics.Point) IReconciler(org.eclipse.jface.text.reconciler.IReconciler) IContentAssistant(org.eclipse.jface.text.contentassist.IContentAssistant) LineStyleProvider(org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider) AbstractLineStyleProvider(org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider) IContentAssistantExtension2(org.eclipse.jface.text.contentassist.IContentAssistantExtension2) IContentAssistantExtension4(org.eclipse.jface.text.contentassist.IContentAssistantExtension4) IInformationPresenter(org.eclipse.jface.text.information.IInformationPresenter) ContentAssistantFacade(org.eclipse.jface.text.source.ContentAssistantFacade) StructuredTextViewerConfiguration(org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration) IQuickAssistAssistant(org.eclipse.jface.text.quickassist.IQuickAssistAssistant)

Example 2 with AbstractLineStyleProvider

use of org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider in project webtools.sourceediting by eclipse.

the class StructuredTextViewer method updateHighlighter.

private void updateHighlighter(IStructuredDocument document) {
    boolean documentSet = false;
    // if highlighter has not been created yet, initialize and install it
    if (fRecHighlighter == null && fConfiguration instanceof StructuredTextViewerConfiguration) {
        String[] types = fConfiguration.getConfiguredContentTypes(this);
        for (int i = 0; i < types.length; i++) {
            String t = types[i];
            // add highlighter/linestyleprovider
            LineStyleProvider[] providers = ((StructuredTextViewerConfiguration) fConfiguration).getLineStyleProviders(this, t);
            if (providers != null) {
                for (int j = 0; j < providers.length; ++j) {
                    if (fRecHighlighter == null) {
                        fRecHighlighter = new ReconcilerHighlighter();
                        ((StructuredTextViewerConfiguration) fConfiguration).setHighlighter(fRecHighlighter);
                    }
                    if (providers[j] instanceof AbstractLineStyleProvider) {
                        ((AbstractLineStyleProvider) providers[j]).init(document, fRecHighlighter);
                        fRecHighlighter.addProvider(t, providers[j]);
                    } else {
                        // init with compatibility instance
                        if (fHighlighter == null) {
                            fHighlighter = new CompatibleHighlighter();
                        }
                        // $NON-NLS-1$
                        Logger.log(Logger.INFO_DEBUG, "CompatibleHighlighter installing compatibility for " + providers[j].getClass());
                        providers[j].init(document, fHighlighter);
                        fHighlighter.addProvider(t, providers[j]);
                    }
                }
            }
        }
        if (fRecHighlighter != null)
            fRecHighlighter.install(this);
        if (fHighlighter != null) {
            fHighlighter.setDocumentPartitioning(fConfiguration.getConfiguredDocumentPartitioning(this));
            // https://bugs.eclipse.org/bugs/show_bug.cgi?id=203347
            // make sure to set document before install
            fHighlighter.setDocument(document);
            fHighlighter.install(this);
            documentSet = true;
        }
    }
    if (fHighlighter != null && !documentSet)
        fHighlighter.setDocument(document);
    // install content type independent plugins
    if (fPresentationReconciler != null)
        fPresentationReconciler.uninstall();
    // 228847 - XSL Content Assist tests fail with Null Pointer on Highlighter
    if (fConfiguration != null)
        fPresentationReconciler = fConfiguration.getPresentationReconciler(this);
    if (fPresentationReconciler != null)
        fPresentationReconciler.install(this);
}
Also used : ReconcilerHighlighter(org.eclipse.wst.sse.ui.internal.provisional.style.ReconcilerHighlighter) CompatibleHighlighter(org.eclipse.wst.sse.ui.internal.provisional.style.CompatibleHighlighter) LineStyleProvider(org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider) AbstractLineStyleProvider(org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider) StructuredTextViewerConfiguration(org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration) AbstractLineStyleProvider(org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider) Point(org.eclipse.swt.graphics.Point)

Aggregations

Point (org.eclipse.swt.graphics.Point)2 StructuredTextViewerConfiguration (org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration)2 AbstractLineStyleProvider (org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider)2 CompatibleHighlighter (org.eclipse.wst.sse.ui.internal.provisional.style.CompatibleHighlighter)2 LineStyleProvider (org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider)2 ReconcilerHighlighter (org.eclipse.wst.sse.ui.internal.provisional.style.ReconcilerHighlighter)2 IContentAssistant (org.eclipse.jface.text.contentassist.IContentAssistant)1 IContentAssistantExtension2 (org.eclipse.jface.text.contentassist.IContentAssistantExtension2)1 IContentAssistantExtension4 (org.eclipse.jface.text.contentassist.IContentAssistantExtension4)1 IHyperlinkDetector (org.eclipse.jface.text.hyperlink.IHyperlinkDetector)1 IInformationPresenter (org.eclipse.jface.text.information.IInformationPresenter)1 IQuickAssistAssistant (org.eclipse.jface.text.quickassist.IQuickAssistAssistant)1 IReconciler (org.eclipse.jface.text.reconciler.IReconciler)1 ContentAssistantFacade (org.eclipse.jface.text.source.ContentAssistantFacade)1 StructuredRegionProcessor (org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor)1