Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2018-04-20 07:45:36 +0000
committerEike Stepper2018-04-20 11:31:24 +0000
commit10ed257e6e4cd8a6b1ab1e4cf69314d469995a83 (patch)
tree86cffee9d2383bff667e8182cac01ea96d396d38 /plugins/org.eclipse.emf.ecore/src/org/eclipse/emf
parent9f392651247f62eb4e0a27ea11c61e38794268f7 (diff)
downloadorg.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.java23
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;
}

Back to the top