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();
}
}
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));
}
}
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);
}
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;
}
}
Aggregations