diff options
| author | Laurent Redor | 2020-06-24 13:26:31 +0000 |
|---|---|---|
| committer | Laurent Redor | 2020-06-24 14:00:21 +0000 |
| commit | df09ab8b1b0434b75d015e8564d6d70b2ff9c80f (patch) | |
| tree | 994265ff0f48d60f4a2999de5e5d2ea92a6a5af0 | |
| parent | 0cb2946099fbdbdc2ffb5658c6fe32cabbdc33ee (diff) | |
| download | org.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.java | 5 |
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); } } |
