/**
* <copyright>
* </copyright>
*
*
*/
package org.emftext.language.java.resource.java.ui;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IAutoEditStrategy;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
import org.eclipse.jface.text.presentation.IPresentationReconciler;
import org.eclipse.jface.text.presentation.PresentationReconciler;
import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
import org.eclipse.jface.text.reconciler.IReconciler;
import org.eclipse.jface.text.reconciler.IReconcilingStrategy;
import org.eclipse.jface.text.reconciler.MonoReconciler;
import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
import org.eclipse.jface.text.rules.ITokenScanner;
import org.eclipse.jface.text.source.DefaultAnnotationHover;
import org.eclipse.jface.text.source.IAnnotationHover;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.swt.SWT;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
import org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector;
import org.eclipse.ui.texteditor.spelling.SpellingProblem;
import org.eclipse.ui.texteditor.spelling.SpellingReconcileStrategy;
import org.eclipse.ui.texteditor.spelling.SpellingService;
/**
* This class provides the configuration for the generated editor. It registers
* content assistance and syntax highlighting.
*/
public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration {
private org.emftext.language.java.resource.java.ui.JavaColorManager colorManager;
private org.emftext.language.java.resource.java.IJavaResourceProvider resourceProvider;
private org.emftext.language.java.resource.java.ui.IJavaAnnotationModelProvider annotationModelProvider;
private org.emftext.language.java.resource.java.ui.JavaQuickAssistAssistant quickAssistAssistant;
private org.emftext.language.java.resource.java.ui.IJavaTokenScanner tokenScanner;
/**
* <p>
* Creates a new editor configuration.
* </p>
*
* @param resourceProvider the provider for the resource (usually this is the
* editor)
* @param colorManager the color manager to use
*/
public JavaSourceViewerConfiguration(org.emftext.language.java.resource.java.IJavaResourceProvider resourceProvider, org.emftext.language.java.resource.java.ui.IJavaAnnotationModelProvider annotationModelProvider, org.emftext.language.java.resource.java.ui.JavaColorManager colorManager) {
super(org.emftext.language.java.resource.java.ui.JavaUIPlugin.getDefault().getPreferenceStore());
this.fPreferenceStore.setDefault(SpellingService.PREFERENCE_SPELLING_ENABLED, true);
this.fPreferenceStore.setDefault(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH, 4);
this.fPreferenceStore.setDefault(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_HYPERLINK_KEY_MODIFIER, Action.findModifierString(SWT.MOD1));
this.resourceProvider = resourceProvider;
this.annotationModelProvider = annotationModelProvider;
this.colorManager = colorManager;
}
/**
* Returns an instance of class
* org.emftext.language.java.resource.java.ui.JavaAutoEditStrategy.
*/
public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
return new IAutoEditStrategy[] {new org.emftext.language.java.resource.java.ui.JavaAutoEditStrategy()};
}
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
ContentAssistant assistant = new ContentAssistant();
assistant.setContentAssistProcessor(new org.emftext.language.java.resource.java.ui.JavaCompletionProcessor(resourceProvider), IDocument.DEFAULT_CONTENT_TYPE);
assistant.enableAutoActivation(true);
assistant.setAutoActivationDelay(500);
assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
return assistant;
}
public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
return new String[] {
IDocument.DEFAULT_CONTENT_TYPE,
};
}
protected ITokenScanner getScanner() {
if (tokenScanner == null) {
tokenScanner = new org.emftext.language.java.resource.java.ui.JavaUIMetaInformation().createTokenScanner(resourceProvider.getResource(), colorManager);
}
return tokenScanner;
}
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
PresentationReconciler reconciler = new PresentationReconciler();
DefaultDamagerRepairer repairer = new DefaultDamagerRepairer(getScanner());
reconciler.setDamager(repairer, IDocument.DEFAULT_CONTENT_TYPE);
reconciler.setRepairer(repairer, IDocument.DEFAULT_CONTENT_TYPE);
return reconciler;
}
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
return new DefaultAnnotationHover();
}
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
return new org.emftext.language.java.resource.java.ui.JavaTextHover(resourceProvider);
}
public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) {
if (sourceViewer == null) {
return null;
}
return new IHyperlinkDetector[] { new org.emftext.language.java.resource.java.ui.JavaHyperlinkDetector(resourceProvider.getResource()) };
}
public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
if (quickAssistAssistant == null) {
quickAssistAssistant = new org.emftext.language.java.resource.java.ui.JavaQuickAssistAssistant(resourceProvider, annotationModelProvider);
}
return quickAssistAssistant;
}
public IReconciler getReconciler(final ISourceViewer sourceViewer) {
if (fPreferenceStore == null || !fPreferenceStore.getBoolean(SpellingService.PREFERENCE_SPELLING_ENABLED)) {
return null;
}
SpellingService spellingService = EditorsUI.getSpellingService();
if (spellingService.getActiveSpellingEngineDescriptor(fPreferenceStore) == null) {
return null;
}
IReconcilingStrategy strategy = new SpellingReconcileStrategy(sourceViewer, spellingService) {
@Override
protected ISpellingProblemCollector createSpellingProblemCollector() {
final ISpellingProblemCollector collector = super.createSpellingProblemCollector();
return new ISpellingProblemCollector() {
public void accept(SpellingProblem problem) {
int offset = problem.getOffset();
int length = problem.getLength();
if (sourceViewer == null) {
return;
}
IDocument document = sourceViewer.getDocument();
if (document == null) {
return;
}
String text;
try {
text = document.get(offset, length);
} catch (BadLocationException e) {
return;
}
if (new org.emftext.language.java.resource.java.ui.JavaIgnoredWordsFilter().ignoreWord(text)) {
return;
}
collector.accept(problem);
}
public void beginCollecting() {
collector.beginCollecting();
}
public void endCollecting() {
collector.endCollecting();
}
};
}
};
MonoReconciler reconciler = new MonoReconciler(strategy, false);
reconciler.setDelay(500);
return reconciler;
}
@Override
public String[] getDefaultPrefixes(ISourceViewer sourceViewer, String contentType) {
return new String[] { "//" };
}
}