Search in sources :

Example 1 with ContentAssistantFacade

use of org.eclipse.jface.text.source.ContentAssistantFacade in project xtext-eclipse by eclipse.

the class XtextReconciler method uninstall.

@Override
public void uninstall() {
    if (isInstalled) {
        textViewer.removeTextInputListener(textInputListener);
        isInstalled = false;
        if (documentListener != null) {
            if (textViewer instanceof ISourceViewerExtension4) {
                ContentAssistantFacade facade = ((ISourceViewerExtension4) textViewer).getContentAssistantFacade();
                facade.removeCompletionListener(documentListener);
            }
            if (textViewer.getDocument() instanceof IXtextDocument) {
                ((IXtextDocument) textViewer.getDocument()).removeXtextDocumentContentObserver(documentListener);
            }
        }
        cancel();
    }
}
Also used : ContentAssistantFacade(org.eclipse.jface.text.source.ContentAssistantFacade) ISourceViewerExtension4(org.eclipse.jface.text.source.ISourceViewerExtension4) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument)

Example 2 with ContentAssistantFacade

use of org.eclipse.jface.text.source.ContentAssistantFacade in project xtext-eclipse by eclipse.

the class XtextReconciler method handleInputDocumentChanged.

protected void handleInputDocumentChanged(IDocument oldInput, IDocument newInput) {
    if (Display.getCurrent() == null) {
        log.error("Changes to the document must only be applied from the Display thread to keep them ordered", new Exception());
    }
    if (shouldInstallCompletionListener) {
        ContentAssistantFacade facade = ((ISourceViewerExtension4) textViewer).getContentAssistantFacade();
        if (facade != null) {
            facade.addCompletionListener(documentListener);
        }
        shouldInstallCompletionListener = false;
    }
    if (oldInput != newInput) {
        if (oldInput instanceof IXtextDocument) {
            ((IXtextDocument) oldInput).removeXtextDocumentContentObserver(documentListener);
        }
        if (newInput instanceof IXtextDocument) {
            ((IXtextDocument) newInput).addXtextDocumentContentObserver(documentListener);
            final IXtextDocument document = XtextDocumentUtil.get(textViewer);
            strategy.setDocument(document);
            if (!initalProcessDone && strategy instanceof IReconcilingStrategyExtension) {
                initalProcessDone = true;
                IReconcilingStrategyExtension reconcilingStrategyExtension = (IReconcilingStrategyExtension) strategy;
                reconcilingStrategyExtension.initialReconcile();
            }
        }
    }
    if (oldInput != null && newInput != null) {
        handleDocumentChanged(new InputChangedDocumentEvent(oldInput, newInput));
    }
}
Also used : IReconcilingStrategyExtension(org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension) ContentAssistantFacade(org.eclipse.jface.text.source.ContentAssistantFacade) ISourceViewerExtension4(org.eclipse.jface.text.source.ISourceViewerExtension4) BadPositionCategoryException(org.eclipse.jface.text.BadPositionCategoryException) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument)

Example 3 with ContentAssistantFacade

use of org.eclipse.jface.text.source.ContentAssistantFacade 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 4 with ContentAssistantFacade

use of org.eclipse.jface.text.source.ContentAssistantFacade in project xtext-eclipse by eclipse.

the class XtextReconciler method install.

@Override
public void install(ITextViewer textViewer) {
    if (!isInstalled) {
        this.textViewer = textViewer;
        textInputListener = new TextInputListener();
        textViewer.addTextInputListener(textInputListener);
        handleInputDocumentChanged(null, textViewer.getDocument());
        if (textViewer instanceof ISourceViewerExtension4) {
            ContentAssistantFacade facade = ((ISourceViewerExtension4) textViewer).getContentAssistantFacade();
            if (facade == null) {
                shouldInstallCompletionListener = true;
            } else {
                facade.addCompletionListener(documentListener);
            }
            if (strategy instanceof ISourceViewerAware) {
                ((ISourceViewerAware) strategy).setSourceViewer((ISourceViewer) textViewer);
            }
        }
        isInstalled = true;
    }
}
Also used : ISourceViewerAware(org.eclipse.xtext.ui.editor.ISourceViewerAware) ContentAssistantFacade(org.eclipse.jface.text.source.ContentAssistantFacade) ITextInputListener(org.eclipse.jface.text.ITextInputListener) ISourceViewerExtension4(org.eclipse.jface.text.source.ISourceViewerExtension4)

Aggregations

ContentAssistantFacade (org.eclipse.jface.text.source.ContentAssistantFacade)4 ISourceViewerExtension4 (org.eclipse.jface.text.source.ISourceViewerExtension4)3 IXtextDocument (org.eclipse.xtext.ui.editor.model.IXtextDocument)2 BadPositionCategoryException (org.eclipse.jface.text.BadPositionCategoryException)1 ITextInputListener (org.eclipse.jface.text.ITextInputListener)1 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 IReconcilingStrategyExtension (org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension)1 Point (org.eclipse.swt.graphics.Point)1 StructuredTextViewerConfiguration (org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration)1 AbstractLineStyleProvider (org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider)1 CompatibleHighlighter (org.eclipse.wst.sse.ui.internal.provisional.style.CompatibleHighlighter)1 LineStyleProvider (org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider)1 ReconcilerHighlighter (org.eclipse.wst.sse.ui.internal.provisional.style.ReconcilerHighlighter)1 StructuredRegionProcessor (org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor)1