From 51bad1cd7cb970da22f56c6c228a98365cf09427 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Tue, 24 Oct 2023 12:01:56 +0200 Subject: [PATCH] Avoid ConcurrentModificationException in MarkerService::UIJob Issue-Ref: 4339 Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4339 Signed-off-by: Simon Barner <barner@fortiss.org> --- .../src/org/fortiss/tooling/kernel/ui/internal/.ratings | 2 +- .../org/fortiss/tooling/kernel/ui/internal/MarkerService.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings index 3815c093e..35a940aa5 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings @@ -1,6 +1,6 @@ ActionService.java e29126b5947c9fd2f1d82bb87001b9d0ead50c3b GREEN ContextMenuService.java 752ecb95721c4ff31583095bdb06b71ef28c4dcf GREEN -MarkerService.java 5cc84f9c1e9811100fad92c0abfa934613173c06 GREEN +MarkerService.java 9715b5ef55ba8c81759dbb914d99a018fcdd2429 GREEN ModelEditorBindingService.java f304addb514cd2de443997e0b52cef7a3a9897bf GREEN ModelElementHandlerService.java 34adeef844bf98c69f1b9a7252f34d0a2b741b54 GREEN NavigatorService.java 1d773dde3791ddf7051616fe249558e7e307757d GREEN diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java index 5cc84f9c1..9715b5ef5 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java @@ -265,7 +265,9 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene public IStatus runInUIThread(IProgressMonitor monitor) { for(EObject eo : violationsMap.keySet()) { postRefreshNotification(eo); - for(IConstraintViolation<? extends EObject> viol : violationsMap.get(eo)) { + // Create copy of list since it might be updated in parallel to the UI update. + for(IConstraintViolation<? extends EObject> viol : new ArrayList<>( + getCachedList(eo))) { postRefreshNotification(viol.getSource()); } } -- GitLab