| Summary: | Computation of ReferenceChange(Left/Right)Target is incorrect | ||
|---|---|---|---|
| Product: | [Modeling] EMFCompare | Reporter: | Mikaël Barbero <mikael.barbero> |
| Component: | Core | Assignee: | EMF Compare <emf.compare-inbox> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | laurent.goubet |
| Version: | unspecified | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
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 |
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