Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Merks2018-06-27 09:40:53 +0000
committerEd Merks2018-06-27 09:40:53 +0000
commit8c4b9b2d3a03cb40c671351d372fcbf772d88ca1 (patch)
treec7d4377b57ac22bc78df25a76805d84207a7d1d7
parente946acfddd5ef90a4ea99f801f72aa5e91c400e4 (diff)
downloadorg.eclipse.emf-8c4b9b2d3a03cb40c671351d372fcbf772d88ca1.tar.gz
org.eclipse.emf-8c4b9b2d3a03cb40c671351d372fcbf772d88ca1.tar.xz
org.eclipse.emf-8c4b9b2d3a03cb40c671351d372fcbf772d88ca1.zip
[536336] The serialized *.ecore generated for package initialization may
produce inconsistent results
-rw-r--r--plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/generator/GenPackageGeneratorAdapter.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/generator/GenPackageGeneratorAdapter.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/generator/GenPackageGeneratorAdapter.java
index f66a27859..bc21b6767 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/generator/GenPackageGeneratorAdapter.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/generator/GenPackageGeneratorAdapter.java
@@ -394,6 +394,7 @@ public class GenPackageGeneratorAdapter extends GenBaseGeneratorAdapter
final ResourceSet originalSet = genModel.eResource().getResourceSet();
EPackage originalPackage = genPackage.getEcorePackage();
+ final String originalPackageNsURI = originalPackage.getNsURI();
ResourceSet outputSet = new ResourceSetImpl();
outputSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new EcoreResourceFactoryImpl());
@@ -507,7 +508,14 @@ public class GenPackageGeneratorAdapter extends GenBaseGeneratorAdapter
}
path.insert(0, '/');
path.append(relativePath);
- return URI.createURI(ePackage.getNsURI()).appendFragment(path.toString());
+
+ // With Xcore generation, the previously serialized resource might have been loaded into the resource set.
+ // So if the package nsURI is the same as the nsURI of the package we're generating,
+ // and if the resource URI is the one to which we are serializing,
+ // redirect to the base URI so that it's subsequently deresolved to a document relative URI.
+ String nsURI = ePackage.getNsURI();
+ URI redirectedURI = originalPackageNsURI.equals(nsURI) && resource.getURI().equals(baseURI) ? baseURI : URI.createURI(nsURI);
+ return redirectedURI.appendFragment(path.toString());
}
}
}

Back to the top