[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