diff options
| author | Maxime Porhel | 2016-10-27 12:13:04 +0000 |
|---|---|---|
| committer | Maxime Porhel | 2017-02-21 07:51:33 +0000 |
| commit | fce931c1390edd3be0bf521be10c690ba27c1f97 (patch) | |
| tree | df5e5b09c69b6378d3320b268b3835e8cc118379 | |
| parent | 3da308551815a35744eee1a9a44c94be0db9e22d (diff) | |
| download | org.eclipse.sirius-fce931c1390edd3be0bf521be10c690ba27c1f97.tar.gz org.eclipse.sirius-fce931c1390edd3be0bf521be10c690ba27c1f97.tar.xz org.eclipse.sirius-fce931c1390edd3be0bf521be10c690ba27c1f97.zip | |
[506580] Avoid potential IllegalArgumentException
If the build() method is called several time from different entry
points, an IllegalArgumentException could occurs if the
convertMappingsToCandidate used to add candidates in the
availableCandidates field which might have been replaced by a
FilteredSet with a predicate checking the activated filters.
Bug: 506580
Change-Id: Id799d8600f77db116b43992a4b756faa1ed19828
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
| -rw-r--r-- | plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/componentization/mappings/table/CandidateMappingManager.java | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/componentization/mappings/table/CandidateMappingManager.java b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/componentization/mappings/table/CandidateMappingManager.java index f0bef3e8ea..fc83bac879 100644 --- a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/componentization/mappings/table/CandidateMappingManager.java +++ b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/componentization/mappings/table/CandidateMappingManager.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2013 THALES GLOBAL SERVICES. + * Copyright (c) 2009, 2016 THALES GLOBAL SERVICES and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -67,18 +67,21 @@ public class CandidateMappingManager { public CandidateMappingManager(final DiagramDescriptionMappingsManager mappingsManager) { nodeMappingPredicate = new Predicate<CandidateMapping>() { + @Override public boolean apply(final CandidateMapping input) { return input.getMapping() instanceof NodeMapping; } }; containerMappingPredicate = new Predicate<CandidateMapping>() { + @Override public boolean apply(final CandidateMapping input) { return input.getMapping() instanceof ContainerMapping; } }; edgeMappingPredicate = new Predicate<CandidateMapping>() { + @Override public boolean apply(final CandidateMapping input) { return input.getMapping() instanceof EdgeMapping; } @@ -97,9 +100,10 @@ public class CandidateMappingManager { public void build(final Collection<Layer> activatedLayers) { computeAllMappings(); sortMappings(); - convertMappingsToCandidate(); + Set<CandidateMapping> candidates = convertMappingsToCandidate(); final Predicate<CandidateMapping> availablePredicate = new Predicate<CandidateMapping>() { + @Override public boolean apply(final CandidateMapping input) { final Collection<Layer> layers = input.getParentLayers(); for (final Layer layer : layers) { @@ -110,7 +114,7 @@ public class CandidateMappingManager { return false; } }; - availableCandidates = Sets.filter(availableCandidates, availablePredicate); + availableCandidates = Sets.filter(candidates, availablePredicate); } private void computeAllMappings() { @@ -130,6 +134,7 @@ public class CandidateMappingManager { * @see java.util.Comparator#compare(java.lang.Object, * java.lang.Object) */ + @Override public int compare(final DiagramElementMapping mapping1, final DiagramElementMapping mapping2) { if (mapping1 instanceof AbstractNodeMapping && mapping2 instanceof AbstractNodeMapping) { return compareAM((AbstractNodeMapping) mapping1, (AbstractNodeMapping) mapping2); @@ -195,13 +200,14 @@ public class CandidateMappingManager { return importedMapping; } - private void convertMappingsToCandidate() { - availableCandidates = new LinkedHashSet<CandidateMapping>(); + private Set<CandidateMapping> convertMappingsToCandidate() { + Set<CandidateMapping> candidates = new LinkedHashSet<CandidateMapping>(); /* convert mappings to candidate */ for (final DiagramElementMapping mapping : allMappings) { final CandidateMapping candidate = new CandidateMapping(mapping); - availableCandidates.add(candidate); + candidates.add(candidate); } + return candidates; } /** |
