Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathalie Lepine2020-10-15 14:21:02 +0000
committerMaxime Porhel2021-02-22 20:05:16 +0000
commitb242f2d4fb8f0358d45287e7ec97f8c283a9fe88 (patch)
tree6e7ae186993469102744471a4f0be00d4b7da736
parentade6bfe0f53232848da213ee53e07e919d905bd6 (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java14
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java9
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;
}

Back to the top