diff options
author | Eike Stepper | 2018-04-20 07:45:36 +0000 |
---|---|---|
committer | Eike Stepper | 2018-04-20 11:31:24 +0000 |
commit | 10ed257e6e4cd8a6b1ab1e4cf69314d469995a83 (patch) | |
tree | 86cffee9d2383bff667e8182cac01ea96d396d38 /plugins/org.eclipse.emf.ecore/src/org/eclipse/emf | |
parent | 9f392651247f62eb4e0a27ea11c61e38794268f7 (diff) | |
download | org.eclipse.emf-10ed257e6e4cd8a6b1ab1e4cf69314d469995a83.tar.gz org.eclipse.emf-10ed257e6e4cd8a6b1ab1e4cf69314d469995a83.tar.xz org.eclipse.emf-10ed257e6e4cd8a6b1ab1e4cf69314d469995a83.zip |
[533850] Resolve collisions of override factories by establishing predecessor relationships
https://bugs.eclipse.org/bugs/show_bug.cgi?id=533850
Change-Id: Ifaff73fd207c12c7e291be6d6bbd9f87b9aa15fb
Signed-off-by: Eike Stepper <stepper@esc-net.de>
Diffstat (limited to 'plugins/org.eclipse.emf.ecore/src/org/eclipse/emf')
-rw-r--r-- | plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/plugin/FactoryOverrideRegistryReader.java | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/plugin/FactoryOverrideRegistryReader.java b/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/plugin/FactoryOverrideRegistryReader.java index 55633f178..c09857539 100644 --- a/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/plugin/FactoryOverrideRegistryReader.java +++ b/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/plugin/FactoryOverrideRegistryReader.java @@ -27,6 +27,7 @@ class FactoryOverrideRegistryReader extends RegistryReader static final String TAG_FACTORY = "factory"; static final String ATT_URI = "uri"; static final String ATT_CLASS = "class"; + static final String ATT_PREDECESSOR = "predecessor"; public FactoryOverrideRegistryReader() { @@ -55,13 +56,27 @@ class FactoryOverrideRegistryReader extends RegistryReader Object ePackageDescriptor = EPackage.Registry.INSTANCE.get(packageURI); if (ePackageDescriptor instanceof EPackage.Descriptor) { - EPackage.Registry.INSTANCE.put(packageURI, new EFactoryDescriptor(element, ATT_CLASS, (EPackage.Descriptor)ePackageDescriptor)); if (ePackageDescriptor instanceof EFactoryDescriptor) { - EFactoryDescriptor descriptor = (EFactoryDescriptor)ePackageDescriptor; - EcorePlugin.INSTANCE.log - ("Both '" + descriptor.element.getContributor().getName() + "' and '" + element.getContributor().getName() + "' register a factory override for '" + packageURI + "'"); + EFactoryDescriptor oldFactoryDescriptor = (EFactoryDescriptor)ePackageDescriptor; + + String oldPredecessor = oldFactoryDescriptor.element.getAttribute(ATT_PREDECESSOR); + if (oldPredecessor != null && oldPredecessor.equals(element.getAttribute(ATT_CLASS))) + { + // The old factory override succeeds over the new one. Do nothing. + return true; + } + + String newPredecessor = element.getAttribute(ATT_PREDECESSOR); + if (newPredecessor == null || !newPredecessor.equals(oldFactoryDescriptor.element.getAttribute(ATT_CLASS))) + { + EcorePlugin.INSTANCE.log + ("Both '" + oldFactoryDescriptor.element.getContributor().getName() + "' and '" + element.getContributor().getName() + "' register a factory override for '" + packageURI + "'"); + } } + + EFactoryDescriptor newFactoryDescriptor = new EFactoryDescriptor(element, ATT_CLASS, (EPackage.Descriptor)ePackageDescriptor); + EPackage.Registry.INSTANCE.put(packageURI, newFactoryDescriptor); } return true; } |