From 82c56d78d229ecc3534fa0884993667de6d9a526 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Wed, 6 Dec 2023 13:40:56 +0100
Subject: [PATCH] Apply upstream fixes to MyReferenceChangeMerger

---
 .../texttools/diffmerge/MyReferenceChangeMerger.java  | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java b/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java
index 9e68f5a..0f07e11 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java
@@ -283,14 +283,14 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 					targetList.add(insertionIndex, expectedValue);
 				}
 			} else if (targetList instanceof EList<?>) {
-				if (insertionIndex < 0 || insertionIndex > targetList.size()) {
+				if (insertionIndex < 0 || insertionIndex >= targetList.size()) {
 					((EList<EObject>)targetList).move(targetList.size() - 1, expectedValue);
 				} else {
 					((EList<EObject>)targetList).move(insertionIndex, expectedValue);
 				}
 			} else {
 				targetList.remove(expectedValue);
-				if (insertionIndex < 0 || insertionIndex > targetList.size()) {
+				if (insertionIndex < 0 || insertionIndex >= targetList.size()) {
 					targetList.add(expectedValue);
 				} else {
 					targetList.add(insertionIndex, expectedValue);
@@ -410,7 +410,7 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 				expectedValue = diff.getValue();
 			}
 		} else if (rightToLeft) {
-			if (reference.isContainment() || valueMatch.getLeft() == null) {
+			if (valueMatch.getLeft() == null) {
 				expectedValue = createCopy(diff.getValue());
 				valueMatch.setLeft(expectedValue);
 				needXmiId = true;
@@ -418,7 +418,7 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 				expectedValue = valueMatch.getLeft();
 			}
 		} else {
-			if (reference.isContainment() || valueMatch.getRight() == null) {
+			if (valueMatch.getRight() == null) {
 				expectedValue = createCopy(diff.getValue());
 				valueMatch.setRight(expectedValue);
 				needXmiId = true;
@@ -440,7 +440,7 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 		if (needXmiId) {
 			// Copy XMI ID when applicable.
 			final Resource initialResource = diff.getValue().eResource();
-			final Resource targetResource = expectedValue.eResource();
+			final Resource targetResource = expectedContainer.eResource();
 			if (initialResource instanceof XMIResource && targetResource instanceof XMIResource) {
 				((XMIResource)targetResource).setID(expectedValue,
 						((XMIResource)initialResource).getID(diff.getValue()));
@@ -496,7 +496,6 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 		}
 
 		final EObject expectedValue;
-		
 		if (valueMatch == null) {
 			// value is out of the scope... we need to look it up
 			if (reference.isMany()) {
-- 
GitLab