diff options
author | Nathalie Lepine | 2020-10-15 14:21:02 +0000 |
---|---|---|
committer | Maxime Porhel | 2021-02-22 20:05:16 +0000 |
commit | b242f2d4fb8f0358d45287e7ec97f8c283a9fe88 (patch) | |
tree | 6e7ae186993469102744471a4f0be00d4b7da736 | |
parent | ade6bfe0f53232848da213ee53e07e919d905bd6 (diff) | |
download | org.eclipse.sirius-b242f2d4fb8f0358d45287e7ec97f8c283a9fe88.tar.gz org.eclipse.sirius-b242f2d4fb8f0358d45287e7ec97f8c283a9fe88.tar.xz org.eclipse.sirius-b242f2d4fb8f0358d45287e7ec97f8c283a9fe88.zip |
[571400] Add a cache for getSubEvents()
Bug: 571400
Cherry-picked-from: 567517
Change-Id: Idabc46861c11e37d3e5d943752804af426204dbc
Signed-off-by: Nathalie Lepine <nathalie.lepine@obeo.fr>
2 files changed, 23 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java index 31f243072d..83190a3cde 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java @@ -15,6 +15,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.sirius.diagram.sequence.business.internal.elements.AbstractFrame; +import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceEvent; import org.eclipse.sirius.diagram.sequence.business.internal.elements.Lifeline; /** @@ -29,6 +30,8 @@ public final class CacheHelper { private static Map<AbstractFrame, Collection<Lifeline>> coverageCache = new ConcurrentHashMap<>(); + private static ConcurrentHashMap<ISequenceEvent, Collection<ISequenceEvent>> subEventsCache = new ConcurrentHashMap<>(); + /** * Avoid instantiation. */ @@ -60,6 +63,7 @@ public final class CacheHelper { */ public static void clearDragTrackerCaches() { coverageCache.clear(); + subEventsCache.clear(); } /** @@ -86,4 +90,14 @@ public final class CacheHelper { public static Map<AbstractFrame, Collection<Lifeline>> getCoverageCache() { return coverageCache; } + + /** + * get subEvents cache. + * + * @return the subEventsCache + */ + public static ConcurrentHashMap<ISequenceEvent, Collection<ISequenceEvent>> getSubEventsCache() { + return subEventsCache; + } + } diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java index f35eb38279..92931ee94a 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java @@ -87,8 +87,17 @@ public final class SubEventsHelper { * bottom. */ public List<ISequenceEvent> getSubEvents() { + Collection<ISequenceEvent> subEvents = CacheHelper.getSubEventsCache().get(parentEvent); + if (subEvents != null) { + return new ArrayList<ISequenceEvent>(subEvents); + } + List<ISequenceEvent> result = getValidSubEvents(); Collections.sort(result, RangeHelper.lowerBoundOrdering().onResultOf(ISequenceEvent.VERTICAL_RANGE)); + + if (CacheHelper.isDragTrackerCacheEnabled()) { + CacheHelper.getSubEventsCache().put(parentEvent, new ArrayList<>(result)); + } return result; } |