From d80989500eb3d538d138c413125c3f1decbf032c Mon Sep 17 00:00:00 2001
From: Simon Barner <barner@fortiss.org>
Date: Wed, 8 Sep 2021 10:29:37 +0200
Subject: [PATCH] Avoid concurrent access to list of targets

Issue-Ref: 4141
Issue-Url: https://git.fortiss.org/af3/af3/issues/4141

Signed-off-by: Simon Barner <barner@fortiss.org>
---
 .../fortiss/tooling/kernel/ui/extension/base/.ratings    | 2 +-
 .../kernel/ui/extension/base/EObjectActionBase.java      | 9 ++++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings
index 316b582c3..07f160f03 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings
@@ -1,6 +1,6 @@
 ContextMenuSubMenuContributorBase.java 6275d96fe8690d9d4744bcbaef3c7d14ba8e30ff GREEN
 DialogMessageHandler.java 8714da09a777c8557de0a5c48ff68c340f9fa91d GREEN
-EObjectActionBase.java 4ef9f8be59e64d4838acc9e268d418ba5d94fa1a GREEN
+EObjectActionBase.java dba517c7527d71637239483dbe15b447fd1e6b19 YELLOW
 EReferenceListPropertySectionBase.java 7390dd7bfdc979e8ff0c5c30c67ab7b6c9d70c92 GREEN
 EReferencePropertySectionBase.java 0548da6778516003257f59d0b4c2b60d458be3b6 GREEN
 EditorBase.java 9c09fff92945256bb8680992ae7bb2c78f47b150 GREEN
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java
index 4ef9f8be5..dba517c75 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java
@@ -16,6 +16,7 @@
 package org.fortiss.tooling.kernel.ui.extension.base;
 
 import static java.util.Arrays.asList;
+import static org.eclipse.emf.common.util.ECollections.unmodifiableEList;
 
 import java.util.List;
 
@@ -66,7 +67,7 @@ public abstract class EObjectActionBase<T extends EObject> extends Action {
 	}
 
 	/** Sets the target object. */
-	public void setTargets(List<T> newTargets) {
+	public synchronized void setTargets(List<T> newTargets) {
 		if(targets == null) {
 			targets = new BasicEList<T>(newTargets);
 		} else {
@@ -82,14 +83,16 @@ public abstract class EObjectActionBase<T extends EObject> extends Action {
 
 	/** Returns the current target. */
 	public T getTarget() {
+		List<T> targets = getTargets();
+
 		// For actions that cannot deal with multiple selections, only the first
 		// item is picked, hence the get(0)
 		return(targets.isEmpty() ? null : targets.get(0));
 	}
 
 	/** Returns the current targets. */
-	public EList<T> getTargets() {
-		return targets;
+	public synchronized EList<T> getTargets() {
+		return unmodifiableEList(targets);
 	}
 
 	/** Refreshes the enabled state for the current action target. */
-- 
GitLab