package org.xtest.ui;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.xtext.common.types.xtext.ui.ITypesProposalProvider;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.service.SingletonBinding;
import org.eclipse.xtext.ui.editor.IXtextEditorCallback;
import org.eclipse.xtext.ui.editor.contentassist.ITemplateProposalProvider;
import org.eclipse.xtext.ui.editor.model.XtextDocument;
import org.eclipse.xtext.ui.editor.model.XtextDocumentProvider;
import org.eclipse.xtext.ui.editor.outline.impl.OutlinePage;
import org.eclipse.xtext.ui.editor.outline.impl.OutlineRefreshJob;
import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
import org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage;
import org.eclipse.xtext.ui.refactoring.ui.IRenameElementHandler;
import org.eclipse.xtext.validation.CancelableDiagnostician;
import org.eclipse.xtext.xbase.ui.highlighting.XbaseHighlightingCalculator;
import org.xtest.XTestRunner;
import org.xtest.interpreter.XTestInterpreter;
import org.xtest.preferences.DefaultPreferenceProvider;
import org.xtest.ui.contentassist.XtestImportingTypesProposalProvider;
import org.xtest.ui.editor.UIDefaultPreferenceProvider;
import org.xtest.ui.editor.UIDefaultPreferenceProvider.Initializer;
import org.xtest.ui.editor.XtestDocument;
import org.xtest.ui.editor.XtestDocumentProvider;
import org.xtest.ui.editor.XtestEditorErrorTickUpdater;
import org.xtest.ui.editor.XtestPreferencePage;
import org.xtest.ui.highlight.XtestHighlightingCalculator;
import org.xtest.ui.interpreter.XtestDependencyAcceptingInterpreter;
import org.xtest.ui.outline.ValidationTriggeredOutlinePage;
import org.xtest.ui.outline.XtestOutlineRefreshJob;
import org.xtest.ui.refactoring.XtestRenameElementHandler;
import org.xtest.ui.resource.XtestDependencyAcceptingResource;
import org.xtest.ui.runner.UiXTestRunner;
import org.xtest.ui.templates.XtestTemplateProposalProvider;
import org.xtest.ui.validation.XtestDiagnostician;
import com.google.common.eventbus.EventBus;
import com.google.inject.name.Names;
/**
* Set up Guice bindings for running xtest plugin in eclipse
*
* @author Michael Barry
*/
@SuppressWarnings("restriction")
public class XTestUiModule extends org.xtest.ui.AbstractXTestUiModule {
/**
* Construct the Guice Binding UI module for the pluin provided
*
* @param plugin
*/
public XTestUiModule(AbstractUIPlugin plugin) {
super(plugin);
}
/**
* Binds {@link CancelableDiagnostician} implementation to custom {@link XtestDiagnostician}
*
* @return {@link XtestDiagnostician} class
*/
@SingletonBinding
public Class<? extends CancelableDiagnostician> bindCancelableDiagnostician() {
return XtestDiagnostician.class;
}
public Class<? extends DefaultPreferenceProvider> bindDefaultPreferenceProvider() {
return UIDefaultPreferenceProvider.class;
}
/**
* Binds {@link EventBus} to a singleton instance for publishing Xtest events to listeners
*
* @return The singleton Xtest event bus
*/
public EventBus bindEventBusToInstance() {
return new EventBus("Xtest Event Bus");
}
@Override
public Class<? extends IRenameElementHandler> bindIRenameElementHandler() {
// Custom implementation that allows refactoring a reference to a Xtest method to also
// refactor the declaration
return XtestRenameElementHandler.class;
}
@Override
public Class<? extends ITemplateProposalProvider> bindITemplateProposalProvider() {
return XtestTemplateProposalProvider.class;
}
@Override
public Class<? extends ITypesProposalProvider> bindITypesProposalProvider() {
return XtestImportingTypesProposalProvider.class;
}
/**
* Binds {@link LanguageRootPreferencePage} implementation to custom {@link XtestPreferencePage}
*
* @return {@link XtestPreferencePage} class
*/
public Class<? extends LanguageRootPreferencePage> bindLanguageRootPreferencePage() {
return XtestPreferencePage.class;
}
/**
* Binds {@link OutlinePage} implementation to custom {@link ValidationTriggeredOutlinePage}
*
* @return {@link ValidationTriggeredOutlinePage} class
*/
public Class<? extends OutlinePage> bindOutlinePage() {
return ValidationTriggeredOutlinePage.class;
}
/**
* Binds {@link OutlineRefreshJob} implementation to custom {@link XtestOutlineRefreshJob}
*
* @return {@link OutlineRefreshJob} class
*/
public Class<? extends OutlineRefreshJob> bindOutlineRefreshJob() {
return XtestOutlineRefreshJob.class;
}
/**
* Binds {@link XbaseHighlightingCalculator} implementation to custom
* {@link XtestHighlightingCalculator}
*
* @return {@link XtestHighlightingCalculator} class
*/
public Class<? extends XbaseHighlightingCalculator> bindXbaseHighlightingCalculator() {
return XtestHighlightingCalculator.class;
}
/**
* Binds {@link XTestInterpreter} to a custom implementation that accepts Xtest files as
* dependencies when methods are called between files
*
* @return {@link XtestDependencyAcceptingInterpreter}
*/
public Class<? extends XTestInterpreter> bindXTestInterpreter() {
return XtestDependencyAcceptingInterpreter.class;
}
/**
* Binds {@link XTestRunner} implementation to custom {@link UiXTestRunner}
*
* @return {@link UiXTestRunner} class
*/
public Class<? extends XTestRunner> bindXTestRunner() {
return UiXTestRunner.class;
}
/**
* Bind {@link XtextDocument} to a custom implementation that allows objects to ask to be
* unregistered from the event bus when the document is disposed.
*
* @return {@link XtestDocument}
*/
public Class<? extends XtextDocument> bindXtextDocument() {
return XtestDocument.class;
}
/**
* Binds {@link XtextDocumentProvider} implementation to custom {@link XtestDocumentProvider}
*
* @return {@link XtestDocumentProvider} class
*/
public Class<? extends XtextDocumentProvider> bindXtextDocumentProvider() {
return XtestDocumentProvider.class;
}
/**
* Binds {@link XtextResource} implementation to custom {@link XtestDependencyAcceptingResource}
*
* @return {@link XtestDependencyAcceptingResource} class
*/
public Class<? extends XtextResource> bindXtextResource() {
return XtestDependencyAcceptingResource.class;
}
/**
* Binds {@link IPreferenceStoreInitializer} implementation for
* {@link UIDefaultPreferenceProvider} to custom
* {@link org.xtest.ui.editor.UIDefaultPreferenceProvider.Initializer} implementation.
*
* @param binder
* The Guice Binder
*/
public void configureXtestPreferenceStoreInitializer(com.google.inject.Binder binder) {
binder.bind(org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer.class)
.annotatedWith(com.google.inject.name.Names.named("UIDefaultPreferenceProvider"))
.to(Initializer.class);
}
@Override
public void configureXtextEditorErrorTickUpdater(com.google.inject.Binder binder) {
binder.bind(IXtextEditorCallback.class)
.annotatedWith(Names.named("IXtextEditorCallBack")).to( //$NON-NLS-1$
XtestEditorErrorTickUpdater.class);
}
}