/* * generated by Xtext 2.18.0.M3 */ package org.eclipse.viatra.solver.language.tests; import com.google.inject.Guice; import com.google.inject.Injector; import org.eclipse.viatra.solver.language.SolverLanguageRuntimeModule; import org.eclipse.viatra.solver.language.SolverLanguageStandaloneSetup; import org.eclipse.xtext.testing.GlobalRegistries; import org.eclipse.xtext.testing.GlobalRegistries.GlobalStateMemento; import org.eclipse.xtext.testing.IInjectorProvider; import org.eclipse.xtext.testing.IRegistryConfigurator; public class SolverLanguageInjectorProvider implements IInjectorProvider, IRegistryConfigurator { protected GlobalStateMemento stateBeforeInjectorCreation; protected GlobalStateMemento stateAfterInjectorCreation; protected Injector injector; static { GlobalRegistries.initializeDefaults(); } @Override public Injector getInjector() { if (injector == null) { this.injector = internalCreateInjector(); stateAfterInjectorCreation = GlobalRegistries.makeCopyOfGlobalState(); } return injector; } protected Injector internalCreateInjector() { return new SolverLanguageStandaloneSetup() { @Override public Injector createInjector() { return Guice.createInjector(createRuntimeModule()); } }.createInjectorAndDoEMFRegistration(); } protected SolverLanguageRuntimeModule createRuntimeModule() { // make it work also with Maven/Tycho and OSGI // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=493672 return new SolverLanguageRuntimeModule() { @Override public ClassLoader bindClassLoaderToInstance() { return SolverLanguageInjectorProvider.class .getClassLoader(); } }; } @Override public void restoreRegistry() { stateBeforeInjectorCreation.restoreGlobalState(); stateBeforeInjectorCreation = null; } @Override public void setupRegistry() { stateBeforeInjectorCreation = GlobalRegistries.makeCopyOfGlobalState(); if (injector == null) { getInjector(); } stateAfterInjectorCreation.restoreGlobalState(); } }