blob: 889799a95612725eea5eb5955b761f86870594f4 (
plain) (
blame)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package org.eclipse.emf.ecore.xcore.util
import org.eclipse.emf.ecore.xcore.mappings.XcoreMapper
import com.google.inject.Inject
import org.eclipse.emf.ecore.xcore.XPackage
import org.eclipse.emf.codegen.ecore.genmodel.GenModelFactory
import java.util.Collections
import static extension org.eclipse.xtext.xtend2.lib.EObjectExtensions.*
import org.eclipse.emf.codegen.ecore.genmodel.GenClass
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage
import org.eclipse.emf.ecore.xcore.XClass
import org.eclipse.emf.codegen.ecore.genmodel.GenFeature
import org.eclipse.emf.ecore.xcore.XStructuralFeature
import org.eclipse.emf.codegen.ecore.genmodel.GenOperation
import org.eclipse.emf.ecore.xcore.XOperation
class XcoreGenmodelBuilder {
@Inject extension XcoreMapper mapper
def getGenModel(XPackage pack) {
val ePackage = pack.mapping.getePackage
val genModel = GenModelFactory::eINSTANCE.createGenModel();
genModel.initialize(Collections::singleton(ePackage));
pack.eResource.getContents().add(1, genModel);
genModel.initialize();
for (genElement : genModel.allContentsIterable)
{
switch genElement {
GenPackage :
{
val xPack = genElement.ecorePackage.toXcoreMapping.xcoreElement as XPackage
xPack.mapping.genPackage = genElement
genElement.toXcoreMapping.xcoreElement = xPack
}
GenClass :
{
val xClass = genElement.ecoreClass.toXcoreMapping.xcoreElement as XClass
xClass.mapping.genClass = genElement
genElement.toXcoreMapping.xcoreElement = xClass
}
GenFeature :
{
val xFeature = genElement.ecoreFeature.toXcoreMapping.xcoreElement as XStructuralFeature
xFeature.mapping.genFeature = genElement
genElement.toXcoreMapping.xcoreElement = xFeature
}
GenOperation :
{
val xOperation = genElement.ecoreOperation.toXcoreMapping.xcoreElement as XOperation
xOperation.mapping.genOperation = genElement
genElement.toXcoreMapping.xcoreElement = xOperation
}
}
}
}
}
|