mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 16:28:56 +00:00
[431435] Bind generated EPackage and EFactory
Signed-off-by: Karsten Thoms <karsten.thoms@itemis.de>
This commit is contained in:
parent
4a0a1591a7
commit
a94438ea69
2 changed files with 72 additions and 0 deletions
|
@ -37,6 +37,7 @@ import org.eclipse.emf.common.util.BasicMonitor
|
|||
import org.eclipse.emf.common.util.Diagnostic
|
||||
import org.eclipse.emf.common.util.URI
|
||||
import org.eclipse.emf.ecore.EClassifier
|
||||
import org.eclipse.emf.ecore.EFactory
|
||||
import org.eclipse.emf.ecore.EObject
|
||||
import org.eclipse.emf.ecore.EPackage
|
||||
import org.eclipse.emf.ecore.EReference
|
||||
|
@ -66,10 +67,12 @@ import org.eclipse.xtext.util.Strings
|
|||
import org.eclipse.xtext.util.internal.Log
|
||||
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
|
||||
import org.eclipse.xtext.xtext.generator.CodeConfig
|
||||
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
|
||||
import org.eclipse.xtext.xtext.generator.model.TypeReference
|
||||
|
||||
import static org.eclipse.xtext.GrammarUtil.*
|
||||
|
||||
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
|
||||
import static extension org.eclipse.xtext.xtext.generator.util.GenModelUtil2.*
|
||||
|
||||
@Log
|
||||
|
@ -196,6 +199,16 @@ class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment {
|
|||
LOG.warn('Illegal JDK level: ' + jdkLevel)
|
||||
}
|
||||
|
||||
boolean bindEPackageAndEFactory = false
|
||||
|
||||
/**
|
||||
* If set generated {@link EPackage} and {@link EFactory} interfaces are bound to their <code>eINSTANCE</code> instance.
|
||||
* @since 2.11
|
||||
*/
|
||||
public def void setBindEPackageAndEFactory (boolean bindEPackageAndEFactory) {
|
||||
this.bindEPackageAndEFactory = bindEPackageAndEFactory
|
||||
}
|
||||
|
||||
protected def String getModelPluginID() {
|
||||
modelPluginID ?: projectConfig.runtime.name
|
||||
}
|
||||
|
@ -320,6 +333,18 @@ class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment {
|
|||
doGenerate(genModel)
|
||||
|
||||
addProjectContributions(clonedGrammar, generatedPackages, workingResourceSet)
|
||||
|
||||
// Register generated EPackage and EFactory instances in the runtime module
|
||||
if (bindEPackageAndEFactory) {
|
||||
for (pkg: generatedPackages) {
|
||||
val genPkg = getGenPackage(pkg, genModel.eResource.resourceSet)
|
||||
|
||||
new GuiceModuleAccess.BindingFactory()
|
||||
.addTypeToInstance(genPkg.qualifiedPackageInterfaceName.typeRef, '''«genPkg.packageInterfaceName».eINSTANCE''')
|
||||
.addTypeToInstance(genPkg.qualifiedFactoryInterfaceName.typeRef, '''«genPkg.factoryInterfaceName».eINSTANCE''')
|
||||
.contributeTo(language.runtimeGenModule)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Finally save the ecore packages to the file system
|
||||
|
|
|
@ -48,6 +48,7 @@ import org.eclipse.emf.common.util.TreeIterator;
|
|||
import org.eclipse.emf.common.util.URI;
|
||||
import org.eclipse.emf.ecore.EClass;
|
||||
import org.eclipse.emf.ecore.EClassifier;
|
||||
import org.eclipse.emf.ecore.EFactory;
|
||||
import org.eclipse.emf.ecore.EObject;
|
||||
import org.eclipse.emf.ecore.EPackage;
|
||||
import org.eclipse.emf.ecore.EReference;
|
||||
|
@ -90,6 +91,7 @@ import org.eclipse.xtext.xbase.lib.StringExtensions;
|
|||
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment;
|
||||
import org.eclipse.xtext.xtext.generator.CodeConfig;
|
||||
import org.eclipse.xtext.xtext.generator.IXtextGeneratorLanguage;
|
||||
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess;
|
||||
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess;
|
||||
import org.eclipse.xtext.xtext.generator.model.ManifestAccess;
|
||||
import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess;
|
||||
|
@ -229,6 +231,16 @@ public class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment {
|
|||
}
|
||||
}
|
||||
|
||||
private boolean bindEPackageAndEFactory = false;
|
||||
|
||||
/**
|
||||
* If set generated {@link EPackage} and {@link EFactory} interfaces are bound to their <code>eINSTANCE</code> instance.
|
||||
* @since 2.11
|
||||
*/
|
||||
public void setBindEPackageAndEFactory(final boolean bindEPackageAndEFactory) {
|
||||
this.bindEPackageAndEFactory = bindEPackageAndEFactory;
|
||||
}
|
||||
|
||||
protected String getModelPluginID() {
|
||||
String _elvis = null;
|
||||
if (this.modelPluginID != null) {
|
||||
|
@ -482,6 +494,41 @@ public class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment {
|
|||
genModel.reconcile();
|
||||
this.doGenerate(genModel);
|
||||
this.addProjectContributions(clonedGrammar, generatedPackages, workingResourceSet);
|
||||
if (this.bindEPackageAndEFactory) {
|
||||
for (final EPackage pkg : generatedPackages) {
|
||||
{
|
||||
Resource _eResource_1 = genModel.eResource();
|
||||
ResourceSet _resourceSet = _eResource_1.getResourceSet();
|
||||
final GenPackage genPkg = GenModelUtil2.getGenPackage(pkg, _resourceSet);
|
||||
GuiceModuleAccess.BindingFactory _bindingFactory = new GuiceModuleAccess.BindingFactory();
|
||||
String _qualifiedPackageInterfaceName = genPkg.getQualifiedPackageInterfaceName();
|
||||
TypeReference _typeRef = TypeReference.typeRef(_qualifiedPackageInterfaceName);
|
||||
StringConcatenationClient _client = new StringConcatenationClient() {
|
||||
@Override
|
||||
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
|
||||
String _packageInterfaceName = genPkg.getPackageInterfaceName();
|
||||
_builder.append(_packageInterfaceName, "");
|
||||
_builder.append(".eINSTANCE");
|
||||
}
|
||||
};
|
||||
GuiceModuleAccess.BindingFactory _addTypeToInstance = _bindingFactory.addTypeToInstance(_typeRef, _client);
|
||||
String _qualifiedFactoryInterfaceName = genPkg.getQualifiedFactoryInterfaceName();
|
||||
TypeReference _typeRef_1 = TypeReference.typeRef(_qualifiedFactoryInterfaceName);
|
||||
StringConcatenationClient _client_1 = new StringConcatenationClient() {
|
||||
@Override
|
||||
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
|
||||
String _factoryInterfaceName = genPkg.getFactoryInterfaceName();
|
||||
_builder.append(_factoryInterfaceName, "");
|
||||
_builder.append(".eINSTANCE");
|
||||
}
|
||||
};
|
||||
GuiceModuleAccess.BindingFactory _addTypeToInstance_1 = _addTypeToInstance.addTypeToInstance(_typeRef_1, _client_1);
|
||||
IXtextGeneratorLanguage _language = this.getLanguage();
|
||||
GuiceModuleAccess _runtimeGenModule = _language.getRuntimeGenModule();
|
||||
_addTypeToInstance_1.contributeTo(_runtimeGenModule);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.saveResource(ePackageResource);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue