Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Redor2020-06-24 13:26:31 +0000
committerLaurent Redor2020-06-24 14:00:21 +0000
commitdf09ab8b1b0434b75d015e8564d6d70b2ff9c80f (patch)
tree994265ff0f48d60f4a2999de5e5d2ea92a6a5af0
parent0cb2946099fbdbdc2ffb5658c6fe32cabbdc33ee (diff)
downloadorg.eclipse.sirius-df09ab8b1b0434b75d015e8564d6d70b2ff9c80f.tar.gz
org.eclipse.sirius-df09ab8b1b0434b75d015e8564d6d70b2ff9c80f.tar.xz
org.eclipse.sirius-df09ab8b1b0434b75d015e8564d6d70b2ff9c80f.zip
[564239] Fix potential ConcurrentModificationException
A ConcurrentModificationException has been observed during a live edition of a VSM (with a corresponding sequence diagram on manual refresh opened): java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next(Unknown Source) at org.eclipse.sirius.diagram.ui.graphical.figures.OverlayLabelsDrawerFigure.paintLabels(OverlayLabelsDrawerFigure.java:79) at org.eclipse.sirius.diagram.ui.graphical.figures.OverlayLabelsDrawerFigure.paint(OverlayLabelsDrawerFigure.java:69) at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170) ... at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205) at org.eclipse.draw2d.ScalableFreeformLayeredPane.paintClientArea(ScalableFreeformLayeredPane.java:60) at org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.ScalableFreeformLayeredPane.paintClientArea(ScalableFreeformLayeredPane.java:82) at org.eclipse.draw2d.Figure.paint(Figure.java:1120) at org.eclipse.draw2d.parts.Thumbnail$ThumbnailUpdater.run(Thumbnail.java:195) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) ... at org.eclipse.sirius.editor.tools.internal.presentation.CustomSiriusEditor.doSave(CustomSiriusEditor.java:511) ... This problem was always here in code for bugzilla 560543 [1], in LabelsOverlayFigure (now renamed in OverlayLabelsDrawerFigure), but not detected. [1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=560543 Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=564239 Change-Id: I43b2dc265844d628357e2c2bac6035c6fccbea24 Signed-off-by: Laurent Redor <laurent.redor@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/figures/OverlayLabelsDrawerFigure.java5
1 files changed, 4 insertions, 1 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/figures/OverlayLabelsDrawerFigure.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/figures/OverlayLabelsDrawerFigure.java
index 46d0e67c15..1aaeab8faf 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/figures/OverlayLabelsDrawerFigure.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/figures/OverlayLabelsDrawerFigure.java
@@ -12,6 +12,8 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.graphical.figures;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Objects;
import org.eclipse.draw2d.Figure;
@@ -76,7 +78,8 @@ public final class OverlayLabelsDrawerFigure extends Figure {
if (figure instanceof OverlayLabel) {
paintOverlayLabel(graphics, (OverlayLabel) figure);
} else {
- for (Object child : figure.getChildren()) {
+ List<Object> children = new ArrayList<Object>(figure.getChildren());
+ for (Object child : children) {
paintLabels(graphics, (IFigure) child);
}
}

Back to the top