Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2016-10-27 12:13:04 +0000
committerMaxime Porhel2017-02-21 07:51:33 +0000
commitfce931c1390edd3be0bf521be10c690ba27c1f97 (patch)
treedf5e5b09c69b6378d3320b268b3835e8cc118379
parent3da308551815a35744eee1a9a44c94be0db9e22d (diff)
downloadorg.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.java18
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;
}
/**

Back to the top