Skip to content
Snippets Groups Projects
Commit 30a63292 authored by Michael Leuschel's avatar Michael Leuschel
Browse files

fix deletion of multi-valued references

from bodeveix:
I have noticed an error linked to the object comparator. As a consequence, values deleted in Camille from multi-valued references (for example "sees") were not delete in the model.
parent f1bde2cb
No related branches found
No related tags found
No related merge requests found
......@@ -168,7 +168,7 @@ public class PersistenceHelper {
if (d.getState() != DifferenceState.MERGED)
evbMerger.copyRightToLeft(d,null);
} catch(Exception e) {
System.out.println("SKIPPED:"+d);
System.out.println("SKIPED:"+d);
}
}
......
......@@ -15,6 +15,7 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eventb.emf.core.EventBNamed;
import org.eventb.emf.core.context.Context;
import org.eventb.emf.core.machine.Variant;
import com.google.common.collect.Iterables;
......@@ -68,14 +69,13 @@ public class EventBEObjectMatcher implements IEObjectMatcher {
}
// this logic was previously found in isSimiliar of EventBMatchEngine
private boolean matching(EObject left, EObject candidate) {
public static boolean matching(EObject left, EObject candidate) {
/*
* If the type differs it can not be a match
*/
if (!areSameType(left, candidate)) {
return false;
}
/*
* Only one variant may exist in a model, so two variants are a match
*/
......@@ -87,10 +87,10 @@ public class EventBEObjectMatcher implements IEObjectMatcher {
* Improve matching for event b named objects with same name
*/
if (left instanceof EventBNamed && candidate instanceof EventBNamed) {
EventBNamed r = (EventBNamed) left;
EventBNamed c = (EventBNamed) left;
EventBNamed l = (EventBNamed) left;
EventBNamed c = (EventBNamed) candidate;
if (r.getName().equals(c.getName())) {
if (l.getName().equals(c.getName())) {
return true;
}
}
......@@ -107,7 +107,7 @@ public class EventBEObjectMatcher implements IEObjectMatcher {
return false;
}
private boolean areSameType(final EObject obj1, final EObject obj2) {
private static boolean areSameType(final EObject obj1, final EObject obj2) {
return obj1 != null && obj2 != null
&& obj1.eClass().equals(obj2.eClass());
}
......@@ -120,11 +120,11 @@ public class EventBEObjectMatcher implements IEObjectMatcher {
* @param obj2
* @return
*/
private boolean areVariants(final EObject obj1, final EObject obj2) {
private static boolean areVariants(final EObject obj1, final EObject obj2) {
return areSameType(obj1, obj2) && obj2 instanceof Variant;
}
private String getEMFId(EObject eObject) {
private static String getEMFId(EObject eObject) {
final String identifier;
if (eObject == null) {
identifier = null;
......
package org.eventb.texttools.diffmerge;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.compare.AttributeChange;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.ReferenceChange;
......@@ -13,7 +14,8 @@ import org.eventb.texttools.TextPositionUtil;
public class EventBMerger extends AbstractMerger {
private AttributeChangeMerger am = new AttributeChangeMerger();
private ReferenceChangeMerger rm = new ReferenceChangeMerger();
// replacement of emfcompare version (solves a bug with multivalued references
private MyReferenceChangeMerger rm = new MyReferenceChangeMerger();
@Override
public boolean isMergerFor(Diff target) {
......@@ -65,7 +67,6 @@ public class EventBMerger extends AbstractMerger {
ReferenceChange d = (ReferenceChange) diff;
//System.out.println("REF CHANGE:"+d.getReference());
//System.out.println("REF VALUE:"+ d.getValue());
rm.copyRightToLeft(diff,null);
Object l = left.eGet(d.getReference());
Object r = right.eGet(d.getReference());
......@@ -78,7 +79,6 @@ public class EventBMerger extends AbstractMerger {
AttributeChange d = (AttributeChange) diff;
//System.out.println("ATTR CHANGE:"+d.getAttribute());
//System.out.println("ATTR VALUE:"+ d.getValue());
am.copyRightToLeft(diff,null);
Object l = left.eGet(d.getAttribute());
Object r = right.eGet(d.getAttribute());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment