Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/Activator.java')
-rw-r--r--plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/Activator.java42
1 files changed, 29 insertions, 13 deletions
diff --git a/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/Activator.java b/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/Activator.java
index 26b5d8d7420..04ef29edffe 100644
--- a/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/Activator.java
+++ b/plugins/uml/tools/org.eclipse.papyrus.uml.tools/src/org/eclipse/papyrus/uml/tools/Activator.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ * Copyright (c) 2014, 2016 CEA LIST, Christian W. Damus, and others.
*
*
* All rights reserved. This program and the accompanying materials
@@ -10,7 +10,7 @@
* Contributors:
* Patrick Tessier (CEA LIST) - Initial API and implementation
* Christian W. Damus (CEA) - bug 425270
- * Christian W. Damus - bug 469464
+ * Christian W. Damus - bugs 469464, 502461
*
/*****************************************************************************/
package org.eclipse.papyrus.uml.tools;
@@ -21,9 +21,11 @@ import java.util.List;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.papyrus.infra.core.internal.clipboard.CopierFactory;
import org.eclipse.papyrus.infra.core.log.LogHelper;
import org.eclipse.papyrus.uml.tools.utils.ElementUtil;
import org.eclipse.papyrus.uml.tools.utils.ImageUtil;
@@ -31,9 +33,14 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.InterfaceRealization;
import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
import org.osgi.framework.BundleContext;
+import com.google.common.collect.ImmutableSetMultimap;
+import com.google.common.collect.SetMultimap;
+
/**
* The activator class controls the plug-in life cycle
*/
@@ -62,24 +69,16 @@ public class Activator extends AbstractUIPlugin {
public Activator() {
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
log = new LogHelper(this);
adapterFactory = createAdapterFactory();
+
+ ensureSensibleCopying();
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
@Override
public void stop(BundleContext context) throws Exception {
adapterFactory.dispose();
@@ -106,6 +105,24 @@ public class Activator extends AbstractUIPlugin {
return adapterFactory;
}
+ private static void ensureSensibleCopying() {
+ // Copying the 'client' reference results in multiple redundant values,
+ // which breaks the XMI deserialization (cf. bug 479425)
+ SetMultimap<EClass, EReference> doNotCopy = ImmutableSetMultimap.<EClass, EReference> builder()
+ .put(UMLPackage.Literals.INTERFACE_REALIZATION, UMLPackage.Literals.DEPENDENCY__CLIENT)
+ .build();
+
+ CopierFactory.registerReferenceFilter((reference, owner) -> {
+ boolean result = false;
+
+ if (owner instanceof InterfaceRealization) {
+ result = doNotCopy.containsEntry(UMLPackage.Literals.INTERFACE_REALIZATION, reference);
+ }
+
+ return result;
+ });
+ }
+
@@ -262,5 +279,4 @@ public class Activator extends AbstractUIPlugin {
return image;
}
-
}

Back to the top