package org.xtest; import org.eclipse.xtend.core.formatting.OrganizeImports; import org.eclipse.xtend.core.formatting.OrganizeImports.ReferenceAcceptor; import org.eclipse.xtend.core.jvmmodel.IXtendJvmAssociations; import org.eclipse.xtend.core.resource.XtendResource; import org.eclipse.xtend.core.scoping.StaticallyImportedFeaturesProvider; import org.eclipse.xtend.core.typing.ReturnTypeProvider; import org.eclipse.xtext.common.types.util.LazyTypeArgumentContext; import org.eclipse.xtext.common.types.util.VisibilityService; import org.eclipse.xtext.generator.IGenerator; import org.eclipse.xtext.resource.XtextResource; import org.eclipse.xtext.xbase.impl.FeatureCallToJavaMapping; import org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter; import org.eclipse.xtext.xbase.jvmmodel.IJvmModelInferrer; import org.eclipse.xtext.xbase.jvmmodel.JvmModelAssociator; import org.eclipse.xtext.xbase.linking.FeatureCallChecker; import org.eclipse.xtext.xbase.scoping.XbaseImportedNamespaceScopeProvider; import org.eclipse.xtext.xbase.scoping.XbaseScopeProvider; import org.eclipse.xtext.xbase.scoping.featurecalls.StaticImplicitMethodsFeatureForTypeProvider; import org.eclipse.xtext.xbase.typing.XbaseTypeProvider; import org.xtest.compiler.XtestJvmModelGenerator; import org.xtest.formatting.XtestOrganizeImports; import org.xtest.formatting.XtestReferenceAcceptor; import org.xtest.interpreter.XTestInterpreter; import org.xtest.jvmmodel.XTestJvmModelInferrer; import org.xtest.jvmmodel.XtestJvmModelAssociator; import org.xtest.linking.XtestFeatureCallChecker; import org.xtest.resource.XtestReturnTypeProvider; import org.xtest.scoping.XTestScopeProvider; import org.xtest.scoping.XtestFeatureCallMapping; import org.xtest.scoping.XtestImportedNamespaceScopeProvider; import org.xtest.scoping.XtestStaticMethodsFeatureForTypeProvider; import org.xtest.scoping.XtestVisibilityService; import org.xtest.types.XTestTypeProvider; import org.xtest.types.XtestTypeArgumentContextProvider; /** * Set up Guice bindings * * @author Michael Barry */ @SuppressWarnings("restriction") public class XTestRuntimeModule extends org.xtest.AbstractXTestRuntimeModule { /** * Bind {@link FeatureCallChecker} to custom implementation that allows assignment to final * fields. * * @return {@link XtestFeatureCallChecker} */ public Class<? extends FeatureCallChecker> bindFeatureCallChecker() { return XtestFeatureCallChecker.class; } /** * Bind {@link FeatureCallToJavaMapping} to custom implementation that understands local method * scoping * * @return {@link XtestFeatureCallMapping} */ public Class<? extends FeatureCallToJavaMapping> bindFeatureCallToJavaMapping() { return XtestFeatureCallMapping.class; } @Override public Class<? extends IGenerator> bindIGenerator() { return XtestJvmModelGenerator.class; } /** * Bind the JVM Model inverrer to an implementation that infers the JVM model of Xtest files * * @return {@link XTestJvmModelInferrer} */ public Class<? extends IJvmModelInferrer> bindIJvmModelInferrer() { return XTestJvmModelInferrer.class; } /** * Bind the Xtend JVM Model Associator to our custom implementation * * @return {@link XtestJvmModelAssociator} */ public Class<? extends IXtendJvmAssociations> bindIXtendJvmAssociations() { return XtestJvmModelAssociator.class; } /** * Bind the JVM Model Associator to an implementation that turns off logical container * connections * * @return {@link XtestJvmModelAssociator} */ public Class<? extends JvmModelAssociator> bindJvmModelAssociator() { return XtestJvmModelAssociator.class; } /** * Bind {@link LazyTypeArgumentContext} to an Xtest-specific implementation that resolves type * parameters from containing functions. * * @return {@link XtestTypeArgumentContextProvider} */ public Class<? extends LazyTypeArgumentContext> bindLazyTypeArgumentContext() { return XtestTypeArgumentContextProvider.class; } /** * Bind {@link OrganizeImports} to custom implementation that organizes imports for Xtest files * rather than Xtend files * * @return {@link XtestOrganizeImports} */ public Class<? extends OrganizeImports> bindOrganizeImports() { return XtestOrganizeImports.class; } /** * Bind {@link ReferenceAcceptor} to custom implementation that fixes a bug with escaped * sequence names in imported type qualified names * * @return {@link XtestReferenceAcceptor} */ public Class<? extends ReferenceAcceptor> bindOrganizeImports$ReferenceAcceptor() { return XtestReferenceAcceptor.class; } /** * Bind the {@link ReturnTypeProvider} to an implementation that provides return types for * custom operations * * @return {@link XtestReturnTypeProvider} */ public Class<? extends ReturnTypeProvider> bindReturnTypeProvider() { return XtestReturnTypeProvider.class; } /** * Bind {@link StaticImplicitMethodsFeatureForTypeProvider} to custom implementation that * contributes static imports as implicit static methods * * @return {@link XtestStaticMethodsFeatureForTypeProvider} */ public Class<? extends StaticallyImportedFeaturesProvider> bindStaticallyImportedFeaturesProvider() { return XtestStaticMethodsFeatureForTypeProvider.class; } /** * Bind {@link VisibilityService} to a custom implementation that makes all members visible, * public and private. * * @return {@link XtestVisibilityService} */ public Class<? extends VisibilityService> bindVisibilityService() { return XtestVisibilityService.class; } /** * Bind {@link XbaseImportedNamespaceScopeProvider} to custom implementation that ignores static * imports * * @return {@link XtestImportedNamespaceScopeProvider} */ public Class<? extends XbaseImportedNamespaceScopeProvider> bindXbaseImportedNamespaceScopeProvider() { return XtestImportedNamespaceScopeProvider.class; } /** * Bind {@link XbaseInterpreter} to custom implementation for Xtest * * @return {@link XTestInterpreter} */ public Class<? extends XbaseInterpreter> bindXbaseInterpreter() { return XTestInterpreter.class; } /** * Bind {@link XbaseScopeProvider} to custom implementation that ignores static imports * * @return {@link XTestScopeProvider} */ public Class<? extends XbaseScopeProvider> bindXbaseScopeProvider() { return XTestScopeProvider.class; } /** * Bind {@link XbaseTypeProvider} to custom implementation that ignores static imports * * @return {@link XTestTypeProvider} */ public Class<? extends XbaseTypeProvider> bindXbaseTypeProvider() { return XTestTypeProvider.class; } /** * Bind the Xtext Resource to an implementation that infers return types for custom operations * * @return {@link XtendResource} */ @Override public Class<? extends XtextResource> bindXtextResource() { return XtendResource.class; } }