[419462] - Initial Design. Prototype where normal Continuations class
instantiation has been replaced by a Guice-based one.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=419462
Bug 419462
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java
index 0144c43..08f614e 100644
--- a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java
@@ -17,10 +17,12 @@
 
 package org.eclipse.ocl.examples.xtext.base;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.pivot.PivotStandaloneSetup;
 import org.eclipse.ocl.examples.xtext.base.basecs.BaseCSPackage;
 import org.eclipse.ocl.examples.xtext.base.basecs.util.BaseCSValidator;
@@ -38,7 +40,7 @@
 	
 	public static void doSetup() {
 		if (injector == null) {
-			new BaseStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new BaseStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -56,10 +58,21 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new BaseStandaloneSetup().createInjector();	
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
+	@SuppressWarnings("null")
+	@NonNull
 	public Injector createInjector() {
 		if (Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().containsKey("xmi"))
 			Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().remove("xmi");
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/InjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/InjectorProvider.java
new file mode 100644
index 0000000..050dda5
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/InjectorProvider.java
@@ -0,0 +1,12 @@
+package org.eclipse.ocl.examples.xtext.base;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import com.google.inject.Injector;
+
+
+public interface InjectorProvider {
+
+	@NonNull
+	public Injector getInjector();
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASFactory.java
new file mode 100644
index 0000000..739c99f
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASFactory.java
@@ -0,0 +1,24 @@
+package org.eclipse.ocl.examples.xtext.base.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+public class BaseCS2ASFactory implements ICS2ASFactory {
+	
+	private final InjectorProvider injectorProvider;
+	
+	@Inject
+	public BaseCS2ASFactory(InjectorProvider injectorProvider) {
+		this.injectorProvider = injectorProvider;
+	}
+	
+	public Continuations createContinuations() {
+		return getInjector().getInstance(Continuations.class);
+	}
+	
+	protected final Injector getInjector() {
+		return injectorProvider.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASRuntimeModule.java
new file mode 100644
index 0000000..2b64614
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASRuntimeModule.java
@@ -0,0 +1,16 @@
+package org.eclipse.ocl.examples.xtext.base.cs2as;
+
+import org.eclipse.xtext.service.AbstractGenericModule;
+
+
+/**
+ * Google Guice runtime module to define the bindings for the CS2AS framework
+ * 
+ * @author asbh
+ */
+public abstract class BaseCS2ASRuntimeModule extends AbstractGenericModule{
+
+	public Class<? extends Continuations> bindContinuations() {
+		return Continuations.class;
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java
index 754a08c..5bebe40 100644
--- a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java
@@ -67,8 +67,14 @@
 import org.eclipse.ocl.examples.xtext.base.basecs.util.VisitableCS;
 import org.eclipse.ocl.examples.xtext.base.utilities.ElementUtil;
 
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
 public class BaseCSPreOrderVisitor extends AbstractExtendingBaseCSVisitor<Continuation<?>, CS2PivotConversion>
 {
+	@Inject
+	ICS2ASFactory cs2asFactory;
+	
 	protected static class ClassSupersContinuation extends SingleContinuation<ClassCS>
 	{
 		private static Dependency[] computeDependencies(@NonNull CS2PivotConversion context, @NonNull ClassCS csElement) {
@@ -377,8 +383,17 @@
 	}
 
 	public BaseCSPreOrderVisitor(@NonNull CS2PivotConversion context) {
-		super(context);
+		super(context);	
+		getInjector().injectMembers(this); // FIXME workaround since this class is not injected by Guice yet.
 	}
+	
+	
+	// FIXME workaround since this class is not injected by guice yet
+	protected Injector getInjector() {
+		// overriden by derived classes
+		return null;
+	}
+	
 
 	public Continuation<?> visiting(@NonNull VisitableCS visitable) {
 		throw new IllegalArgumentException("Unsupported " + visitable.eClass().getName() + " for CS2Pivot PreOrder pass");
@@ -395,7 +410,7 @@
 		if (pivotElement == null) {
 			return null;
 		}
-		Continuations continuations = new Continuations();
+		Continuations continuations = cs2asFactory.createContinuations();
 		if (csClass.getOwnedTemplateSignature() != null) {
 			continuations.add(new TemplateSignatureContinuation(context, pivotElement, csClass));
 		}
@@ -536,4 +551,4 @@
 	public Continuation<?> visitWildcardTypeRefCS(@NonNull WildcardTypeRefCS csWildcardTypeRef) {
 		return null;
 	}
-}
\ No newline at end of file
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/ICS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/ICS2ASFactory.java
new file mode 100644
index 0000000..ce2dfae
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/ICS2ASFactory.java
@@ -0,0 +1,14 @@
+package org.eclipse.ocl.examples.xtext.base.cs2as;
+
+
+
+/**
+ * The CS2AS framework classes Factory
+ * 
+ * @author asbh
+ */
+public interface ICS2ASFactory {
+		
+	Continuations createContinuations();
+
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java
index 841716f..9a2f234 100644
--- a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java
@@ -33,8 +33,12 @@
 public interface BaseCSResource extends BaseResource
 {
 	/**
-	 * Create the CS2AS converter for the cs2asResourceMap conversions using metaModelManager.
+	 * @param cs2asResourceMap
+	 * @param metaModelManager
+	 * @return the CS2AS converter for the cs2asResourceMap conversions using metaModelManager.
+	 * @deprecated Google Injection use. It will removed to simplify API
 	 */
+	@Deprecated
 	@NonNull CS2Pivot createCS2Pivot(@NonNull Map<? extends Resource, ? extends ASResource> cs2asResourceMap, @NonNull MetaModelManager metaModelManager);
 
 	/**
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLInjectorProvider.java
new file mode 100644
index 0000000..1747f55
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLInjectorProvider.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.completeocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class CompleteOCLInjectorProvider implements InjectorProvider{
+
+	@NonNull
+	public Injector getInjector() {
+		return CompleteOCLStandaloneSetup.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java
index 88247ca..78f30d4 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java
@@ -17,6 +17,7 @@
 package org.eclipse.ocl.examples.xtext.completeocl;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.completeocl.parser.antlr.CompleteOCLParser;
 import org.eclipse.ocl.examples.xtext.completeocl.scoping.CompleteOCLScopeProvider;
 import org.eclipse.ocl.examples.xtext.completeocl.services.CompleteOCLHiddenTokenSequencer;
@@ -34,11 +35,6 @@
  */
 public class CompleteOCLRuntimeModule extends org.eclipse.ocl.examples.xtext.completeocl.AbstractCompleteOCLRuntimeModule
 {
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
 	
 	@SuppressWarnings("restriction")
 	@Override
@@ -68,4 +64,15 @@
 	public Class<? extends XtextResource> bindXtextResource() {
 		return CompleteOCLCSResource.class;
 	}
+	
+	/**
+	 * @return The language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return CompleteOCLInjectorProvider.class;
+	}
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java
index 48de874..f307aae 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java
@@ -16,8 +16,11 @@
  */
 package org.eclipse.ocl.examples.xtext.completeocl;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.xtext.completeocl.completeoclcs.CompleteOCLCSPackage;
+import org.eclipse.ocl.examples.xtext.completeocl.cs2as.CompleteOCLCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.completeocl.scoping.CompleteOCLScoping;
 import org.eclipse.ocl.examples.xtext.completeocl.utilities.CompleteOCLASResourceFactory;
 
@@ -32,8 +35,9 @@
 	private static Injector injector = null;
 	
 	public static void doSetup() {
+		assert !EMFPlugin.IS_ECLIPSE_RUNNING;			// Enforces Bug 382058 fix
 		if (injector == null) {
-			new CompleteOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new CompleteOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -50,14 +54,24 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new CompleteOCLStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
 	@Override
 	public Injector createInjector() {
 		init();
-		injector = super.createInjector();
+		injector = super.createInjector()
+				.createChildInjector(new CompleteOCLCS2ASRuntimeModule());
 		return injector;
 	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASFactory.java
new file mode 100644
index 0000000..6d20f55
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASFactory.java
@@ -0,0 +1,14 @@
+package org.eclipse.ocl.examples.xtext.completeocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASFactory;
+
+import com.google.inject.Inject;
+
+public class CompleteOCLCS2ASFactory extends EssentialOCLCS2ASFactory {
+
+	@Inject
+	public CompleteOCLCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASRuntimeModule.java
new file mode 100644
index 0000000..483929f
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASRuntimeModule.java
@@ -0,0 +1,12 @@
+package org.eclipse.ocl.examples.xtext.completeocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASRuntimeModule;
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+
+
+public class CompleteOCLCS2ASRuntimeModule extends BaseCS2ASRuntimeModule {
+		 
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return CompleteOCLCS2ASFactory.class;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLInjectorProvider.java
new file mode 100644
index 0000000..157b359
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLInjectorProvider.java
@@ -0,0 +1,14 @@
+package org.eclipse.ocl.examples.xtext.essentialocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class EssentialOCLInjectorProvider implements InjectorProvider {
+
+	public @NonNull	Injector getInjector() {
+		return EssentialOCLStandaloneSetup.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java
index c2ecd9c..4ced0a3 100644
--- a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java
@@ -17,6 +17,7 @@
 package org.eclipse.ocl.examples.xtext.essentialocl;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.essentialocl.parser.antlr.EssentialOCLParser;
 import org.eclipse.ocl.examples.xtext.essentialocl.services.RetokenizingTokenSource;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream;
@@ -30,13 +31,7 @@
 public class EssentialOCLRuntimeModule extends org.eclipse.ocl.examples.xtext.essentialocl.AbstractEssentialOCLRuntimeModule
 {	
 	public static final String LANGUAGE_ID = "org.eclipse.ocl.examples.xtext.essentialocl.EssentialOCL";
-
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
-	
+		
 	@Override
 	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
 		return RetokenizingEssentialOCLParser.class;
@@ -64,4 +59,19 @@
 			return super.createTokenStream(new RetokenizingTokenSource(tokenSource, getTokenDefProvider().getTokenDefMap()));
 		}
 	}
+	
+	/**
+	 * @return the language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return EssentialOCLInjectorProvider.class;
+	}
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
+	
+//	public void configureCS2PivotResourceAdapter(Binder binder) {
+//		binder.bind(CS2PivotResourceAdapter.class);
+//	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java
index ac90f09..a2bccb6 100644
--- a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java
@@ -23,7 +23,9 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.xtext.base.BaseStandaloneSetup;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.EssentialOCLCSPackage;
 import org.eclipse.ocl.examples.xtext.essentialocl.scoping.EssentialOCLScoping;
 import org.eclipse.ocl.examples.xtext.essentialocl.utilities.EssentialOCLASResourceFactory;
@@ -41,7 +43,7 @@
 	public static void doSetup() {
 		assert !EMFPlugin.IS_ECLIPSE_RUNNING;			// Enforces Bug 382058 fix
 		if (injector == null) {
-			new EssentialOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new EssentialOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -62,7 +64,16 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new EssentialOCLStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
@@ -73,7 +84,8 @@
 			globalExtensionToFactoryMap.remove("xmi");
 		if (!globalExtensionToFactoryMap.containsKey(Resource.Factory.Registry.DEFAULT_EXTENSION))
 			globalExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
-		injector = super.createInjector();
+		injector = super.createInjector()
+				.createChildInjector(new EssentialOCLCS2ASRuntimeModule());
 		return injector;
 	}
 
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASFactory.java
new file mode 100644
index 0000000..1338a8e
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASFactory.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.essentialocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASFactory;
+
+import com.google.inject.Inject;
+
+
+public class EssentialOCLCS2ASFactory extends BaseCS2ASFactory {
+
+	@Inject
+	public EssentialOCLCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASRuntimeModule.java
new file mode 100644
index 0000000..2c669aa
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASRuntimeModule.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.essentialocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASRuntimeModule;
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+
+
+public class EssentialOCLCS2ASRuntimeModule extends BaseCS2ASRuntimeModule {
+		
+	/**
+	 * @return 
+	 */ 
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return EssentialOCLCS2ASFactory.class;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java
index 84b8aef..5c28de8 100644
--- a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java
@@ -37,6 +37,7 @@
 import org.eclipse.ocl.examples.xtext.base.cs2as.CS2PivotConversion;
 import org.eclipse.ocl.examples.xtext.base.cs2as.Continuation;
 import org.eclipse.ocl.examples.xtext.base.cs2as.SingleContinuation;
+import org.eclipse.ocl.examples.xtext.essentialocl.EssentialOCLStandaloneSetup;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.CollectionTypeCS;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.ConstructorExpCS;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.ContextCS;
@@ -51,6 +52,8 @@
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.VariableCS;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.util.AbstractEssentialOCLCSPreOrderVisitor;
 
+import com.google.inject.Injector;
+
 public class EssentialOCLCSPreOrderVisitor extends AbstractEssentialOCLCSPreOrderVisitor
 {
 	protected static class CollectionTypeContinuation extends SingleContinuation<CollectionTypeCS>
@@ -210,4 +213,9 @@
 	public Continuation<?> visitVariableCS(@NonNull VariableCS csVariable) {
 		return null;
 	}
+	
+	@Override
+	protected Injector getInjector() {
+		return EssentialOCLStandaloneSetup.getInjector();
+	}	
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java
index be3d7c8..8af79ff 100644
--- a/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java
@@ -32,7 +32,7 @@
 	
 	public static void doSetup() {
 		if (injector == null) {
-			new MarkupStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new MarkupStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreInjectorProvider.java
new file mode 100644
index 0000000..4cbf7ab
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreInjectorProvider.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclinecore;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class OCLinEcoreInjectorProvider implements InjectorProvider{
+
+	@NonNull
+	public Injector getInjector() {
+		return OCLinEcoreStandaloneSetup.getInjector();
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java
index 9dc5bdf..879e351 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java
@@ -17,6 +17,7 @@
 package org.eclipse.ocl.examples.xtext.oclinecore;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.essentialocl.services.RetokenizingTokenSource;
 import org.eclipse.ocl.examples.xtext.oclinecore.parser.antlr.OCLinEcoreParser;
 import org.eclipse.ocl.examples.xtext.oclinecore.services.OCLinEcoreValueConverterService;
@@ -33,17 +34,6 @@
  */
 public class OCLinEcoreRuntimeModule extends AbstractOCLinEcoreRuntimeModule
 {
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
-	
-	@Override
-	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
-		return RetokenizingOCLinEcoreParser.class;
-	}
-
 	public static class RetokenizingOCLinEcoreParser extends OCLinEcoreParser
 	{
 		@Override
@@ -51,7 +41,12 @@
 			return super.createTokenStream(new RetokenizingTokenSource(tokenSource, getTokenDefProvider().getTokenDefMap()));
 		}
 	}
-
+	
+	@Override
+	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
+		return RetokenizingOCLinEcoreParser.class;
+	}
+	
 	@Override
 	public Class<? extends IValueConverterService> bindIValueConverterService() {
 		return OCLinEcoreValueConverterService.class;
@@ -61,4 +56,15 @@
 	public Class<? extends XtextResource> bindXtextResource() {
 		return OCLinEcoreCSResource.class;
 	}
+	
+	/**
+	 * @return The language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return OCLinEcoreInjectorProvider.class;
+	}
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java
index 2605d81..da3effd 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java
@@ -17,7 +17,10 @@
 
 package org.eclipse.ocl.examples.xtext.oclinecore;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.oclinecore.cs2as.OCLinEcoreCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.oclinecore.oclinecorecs.OCLinEcoreCSPackage;
 import org.eclipse.ocl.examples.xtext.oclinecore.utilities.OCLinEcoreASResourceFactory;
 
@@ -33,7 +36,7 @@
 	
 	public static void doSetup() {
 		if (injector == null) {
-			new OCLinEcoreStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new OCLinEcoreStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -50,14 +53,24 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new OCLinEcoreStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
 	@Override
 	public Injector createInjector() {
 		init();
-		injector = super.createInjector();
+		injector = super.createInjector()
+			.createChildInjector(new OCLinEcoreCS2ASRuntimeModule());
 		return injector;
 	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASFactory.java
new file mode 100644
index 0000000..58a5eac
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASFactory.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclinecore.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASFactory;
+
+import com.google.inject.Inject;
+
+
+public class OCLinEcoreCS2ASFactory extends EssentialOCLCS2ASFactory {
+
+	@Inject
+	public OCLinEcoreCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASRuntimeModule.java
new file mode 100644
index 0000000..25d6d9b
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASRuntimeModule.java
@@ -0,0 +1,11 @@
+package org.eclipse.ocl.examples.xtext.oclinecore.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASRuntimeModule;
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+
+public class OCLinEcoreCS2ASRuntimeModule extends BaseCS2ASRuntimeModule {
+
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return OCLinEcoreCS2ASFactory.class;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibInjectorProvider.java
new file mode 100644
index 0000000..2426725
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibInjectorProvider.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclstdlib;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class OCLstdlibInjectorProvider implements InjectorProvider {
+	
+	@NonNull
+	public Injector getInjector() {
+		return OCLstdlibStandaloneSetup.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java
index 1f9761d..99102be 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java
@@ -18,6 +18,7 @@
 package org.eclipse.ocl.examples.xtext.oclstdlib;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.essentialocl.services.RetokenizingTokenSource;
 import org.eclipse.ocl.examples.xtext.oclstdlib.parser.antlr.OCLstdlibParser;
 import org.eclipse.ocl.examples.xtext.oclstdlib.scoping.OCLstdlibScopeProvider;
@@ -39,12 +40,7 @@
  */
 @SuppressWarnings("restriction")
 public class OCLstdlibRuntimeModule extends org.eclipse.ocl.examples.xtext.oclstdlib.AbstractOCLstdlibRuntimeModule
-{	
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
+{
 
 	public Class<? extends CompositeEValidator> bindCompositeEValidator() {
 		return OCLstdlibCompositeEValidator.class;
@@ -81,4 +77,16 @@
 	public Class<? extends XtextResource> bindXtextResource() {
 		return OCLstdlibCSResource.class;
 	}
+	
+	/**
+	 * @return The language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return OCLstdlibInjectorProvider.class;
+	}
+	
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java
index 0517703..ed04bb1 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java
@@ -17,8 +17,11 @@
 
 package org.eclipse.ocl.examples.xtext.oclstdlib;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.oclstdlib.cs2as.OCLstdlibCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.oclstdlib.oclstdlibcs.OCLstdlibCSPackage;
 import org.eclipse.ocl.examples.xtext.oclstdlib.oclstdlibcs.util.OCLstdlibCSValidator;
 import org.eclipse.ocl.examples.xtext.oclstdlib.scoping.OCLstdlibScoping;
@@ -35,8 +38,9 @@
 	private static Injector injector = null;
 	
 	public static void doSetup() {
+		assert !EMFPlugin.IS_ECLIPSE_RUNNING;			// Enforces Bug 382058 fix
 		if (injector == null) {
-			new OCLstdlibStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new OCLstdlibStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -55,15 +59,24 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new OCLstdlibStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
 	@Override
 	public Injector createInjector() {
 		init();
-		injector = super.createInjector();
+		injector = super.createInjector()
+				.createChildInjector(new OCLstdlibCS2ASRuntimeModule());
 		return injector;
 	}
-}
-
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASFactory.java
new file mode 100644
index 0000000..1a9a405
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASFactory.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclstdlib.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASFactory;
+
+import com.google.inject.Inject;
+
+
+public class OCLstdlibCS2ASFactory extends EssentialOCLCS2ASFactory {
+
+	@Inject
+	public OCLstdlibCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASRuntimeModule.java
new file mode 100644
index 0000000..18252ad
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASRuntimeModule.java
@@ -0,0 +1,12 @@
+package org.eclipse.ocl.examples.xtext.oclstdlib.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+import org.eclipse.xtext.service.AbstractGenericModule;
+
+
+public class OCLstdlibCS2ASRuntimeModule extends AbstractGenericModule {
+	
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return OCLstdlibCS2ASFactory.class;
+	}
+}
\ No newline at end of file