Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/resource/XcoreResource.java')
-rw-r--r--org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/resource/XcoreResource.java36
1 files changed, 35 insertions, 1 deletions
diff --git a/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/resource/XcoreResource.java b/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/resource/XcoreResource.java
index df02b518e..6fe890bbf 100644
--- a/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/resource/XcoreResource.java
+++ b/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/resource/XcoreResource.java
@@ -1,11 +1,21 @@
package org.eclipse.emf.ecore.xcore.resource;
+import java.util.Collections;
+import java.util.Iterator;
+
+import org.eclipse.emf.codegen.ecore.genmodel.GenBase;
+import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
+import org.eclipse.emf.codegen.ecore.genmodel.GenModelFactory;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xcore.XPackage;
import org.eclipse.emf.ecore.xcore.scoping.LazyCreationProxyUriConverter;
+import org.eclipse.emf.ecore.xcore.util.XcoreEcoreBuilder;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.parser.IParseResult;
@@ -45,7 +55,31 @@ public class XcoreResource extends XbaseResource {
}
protected void lateInitialize() {
-
+ if (getParseResult() != null && getParseResult().getRootASTElement() instanceof XPackage)
+ {
+ XPackage model = (XPackage) getParseResult().getRootASTElement();
+ XcoreEcoreBuilder xcoreEcoreBuilder = new XcoreEcoreBuilder();
+ EPackage ePackage = xcoreEcoreBuilder.getEPackage(model);
+ super.getContents().add(ePackage);
+ GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
+ genModel.initialize(Collections.singleton(ePackage));
+ super.getContents().add(genModel);
+ genModel.initialize();
+ for (Iterator<EObject> i = genModel.eAllContents(); i.hasNext(); )
+ {
+ EObject eObject = i.next();
+ if (eObject instanceof GenBase)
+ {
+ GenBase genBase = (GenBase)eObject;
+ EModelElement eModelElement = genBase.getEcoreModelElement();
+ if (eModelElement != null)
+ {
+ XcoreEcoreBuilder.map(eModelElement, (GenBase)eObject);
+ }
+ }
+ }
+ xcoreEcoreBuilder.link();
+ }
}
@Override

Back to the top