summaryrefslogtreecommitdiffstats
path: root/rba.tool.editor.ui/src/rba/tool/editor/ui/activator/ExtensionEditorActivator.xtend
blob: aa974cab2771bf4d12aba1ed23ebb1af2d20fd31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package rba.tool.editor.ui.activator

import com.google.inject.Guice
import com.google.inject.Module
import org.apache.log4j.Logger
import org.eclipse.xtext.util.Modules2
import rba.tool.editor.ui.internal.EditorActivator
import rba.tool.editor.util.ExtensionModuleManager

class ExtensionEditorActivator extends EditorActivator {

	private static final Logger logger = Logger.getLogger(ExtensionEditorActivator);

	override createInjector(String language) {
		try {
			val runtimeModule = getRuntimeModule(language);
			val sharedStateModule = getSharedStateModule();
			val uiModule = getUiModule(language);
			val extensionModule = getExtensionModule();
			val mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule, extensionModule);
			return Guice.createInjector(mergedModule);
		} catch(Exception e) {
			logger.error("Failed to create injector for " + language);
			logger.error(e.getMessage(), e);
			throw new RuntimeException("Failed to create injector for " + language, e);
		}
	}

	def public static ExtensionEditorActivator getInstance() {
		return EditorActivator.getInstance() as ExtensionEditorActivator;
	}

	def public injectMembers(Object object) {
		getInjector(EditorActivator.RBA_TOOL_EDITOR_RBAMODEL).injectMembers(object);
	}

	def protected Module getExtensionModule() {
		val modules = ExtensionModuleManager.INSTANCE.getExtensionModules();
		return Modules2.mixin(modules);
	}
}