[431597] Fix problems with *.genmodel extending *.xcore model
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenModelImpl.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenModelImpl.java
index 58f723a..34ecb98 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenModelImpl.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenModelImpl.java
@@ -9133,9 +9133,9 @@
protected void getMissingPackagesHelper(List<EPackage> ePackages, List<GenPackage> genPackages)
{
- for (GenPackage genPackage : genPackages)
+ for (int i = 0; i < genPackages.size(); ++i)
{
- EPackage ePackage = genPackage.getEcorePackage();
+ EPackage ePackage = genPackages.get(i).getEcorePackage();
if (ePackage != null)
{
for (Iterator<EObject> j = ePackage.eAllContents(); j.hasNext();)
diff --git a/plugins/org.eclipse.emf.converter/src/org/eclipse/emf/converter/ui/contribution/base/ModelConverterPackagePage.java b/plugins/org.eclipse.emf.converter/src/org/eclipse/emf/converter/ui/contribution/base/ModelConverterPackagePage.java
index 902d1e4..a302c4f 100644
--- a/plugins/org.eclipse.emf.converter/src/org/eclipse/emf/converter/ui/contribution/base/ModelConverterPackagePage.java
+++ b/plugins/org.eclipse.emf.converter/src/org/eclipse/emf/converter/ui/contribution/base/ModelConverterPackagePage.java
@@ -83,6 +83,7 @@
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.provider.ItemProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
@@ -740,7 +741,8 @@
{
IFile file = (IFile)element;
URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
- return "genmodel".equals(file.getFileExtension())
+ String fileExtension = file.getFileExtension();
+ return ("genmodel".equals(fileExtension) || "xcore".equals(fileExtension))
&& !file.getFullPath().equals(genModelPath)
&& !genModelURIs.contains(uri);
}
@@ -762,7 +764,7 @@
{
URI genModelURI = URI.createPlatformResourceURI(files[i].getFullPath().toString(), true);
Resource genModelResource = referencedGenModels.getResource(genModelURI, true);
- GenModel genModel = (GenModel)genModelResource.getContents().get(0);
+ GenModel genModel = (GenModel)EcoreUtil.getObjectByType(genModelResource.getContents(), GenModelPackage.Literals.GEN_MODEL);
genModels.add(genModel);
}
diff --git a/plugins/org.eclipse.emf.importer.ecore/src/org/eclipse/emf/importer/ecore/EcoreImporter.java b/plugins/org.eclipse.emf.importer.ecore/src/org/eclipse/emf/importer/ecore/EcoreImporter.java
index 6d1d055..0e57b9e 100644
--- a/plugins/org.eclipse.emf.importer.ecore/src/org/eclipse/emf/importer/ecore/EcoreImporter.java
+++ b/plugins/org.eclipse.emf.importer.ecore/src/org/eclipse/emf/importer/ecore/EcoreImporter.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.emf.importer.ecore;
+import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
@@ -65,9 +66,18 @@
}
EcoreUtil.resolveAll(ecoreResourceSet);
+ List<EPackage> ePackages = getEPackages();
for (Resource resource : ecoreResourceSet.getResources())
{
- getEPackages().addAll(EcoreUtil.<EPackage>getObjectsByType(resource.getContents(), EcorePackage.Literals.EPACKAGE));
+ ePackages.addAll(EcoreUtil.<EPackage>getObjectsByType(resource.getContents(), EcorePackage.Literals.EPACKAGE));
+ }
+
+ for (Iterator<EPackage> i = ePackages.iterator(); i.hasNext(); )
+ {
+ if ("xcore.lang".equals(i.next().getNsURI()))
+ {
+ i.remove();
+ }
}
BasicDiagnostic diagnosticChain =
@@ -76,7 +86,7 @@
ConverterUtil.ACTION_MESSAGE_NONE,
EcoreImporterPlugin.INSTANCE.getString("_UI_ErrorsWereDetectedEcore_message"),
null);
- for (EPackage ePackage : getEPackages())
+ for (EPackage ePackage : ePackages)
{
Diagnostician.INSTANCE.validate(ePackage, diagnosticChain);
}