Community
Participate
Working Groups
If an EReference references an EObject not being matched (i.e. outside of the resource set), ReferencesCheck#createNonConflictingReferencesUpdate(DiffGroup, EReference, EObject, EObject) and ReferencesCheck#checkReferenceUpdates(DiffGroup, Match3Elements, ERerefence) does not check for referencing the same EObject. It can be corrected by removing identical EObject from addedReferences and deletedReferences lists: // check that added references are not in deleted references (FIXME: may be necessary to add non // resolved proxy handling) for (EObject addedReference : new ArrayList<EObject>(addedReferences)) { if (deletedReferences.contains(addedReference)) { deletedReferences.remove(addedReference); addedReferences.remove(addedReference); } } It has to be added at first position inside the last 'else' of createNonConflictingReferencesUpdate() and checkReferenceUpdates() Mika
You obviously don't even have to check for list containment: for (EObject addedReference : new ArrayList<EObject>(addedReferences)) { deletedReferences.remove(addedReference); addedReferences.remove(addedReference); }
It also has to be done on deletedReferences list: for (EObject deletedReference : new ArrayList<EObject>(deletedReferences)) { deletedReferences.remove(deletedReference); addedReferences.remove(deletedReference); }
Fixed on master and backported for 1.2.1