diff options
author | Ed Merks | 2018-06-27 09:40:53 +0000 |
---|---|---|
committer | Ed Merks | 2018-06-27 09:40:53 +0000 |
commit | 8c4b9b2d3a03cb40c671351d372fcbf772d88ca1 (patch) | |
tree | c7d4377b57ac22bc78df25a76805d84207a7d1d7 | |
parent | e946acfddd5ef90a4ea99f801f72aa5e91c400e4 (diff) | |
download | org.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.java | 10 |
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()); } } } |