Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2020-10-22 20:18:57 +0000
committerMaxime Porhel2020-10-23 13:59:43 +0000
commite17a3820d7ebc8dadf604e1d183fb8c077ad90f1 (patch)
tree35793c5d32b7687671b6703a03c977db52a9a299 /plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram
parent5f2e7764eb8f6dd5ebe5670c4be39c40ae541e8f (diff)
downloadorg.eclipse.sirius-e17a3820d7ebc8dadf604e1d183fb8c077ad90f1.tar.gz
org.eclipse.sirius-e17a3820d7ebc8dadf604e1d183fb8c077ad90f1.tar.xz
org.eclipse.sirius-e17a3820d7ebc8dadf604e1d183fb8c077ad90f1.zip
[567517] Add a cache for SequenceDiagram.getAllDelimitedEvents()
- Several other SequenceDiagram.getAllXXX methods already use a cache if the SequenceDiagram cache is enabled some of them use this getAllDelimitedEvents but it is also used in several other places with a lot of calls during some user actions like drag, move, resize and also during layout. Bug: 567517 Change-Id: Ie57919ae0a906c9c35904f523560c3385b5f7287 Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
Diffstat (limited to 'plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram')
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java36
1 files changed, 28 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java
index 252487a045..5bc53301cd 100644
--- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java
+++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java
@@ -140,6 +140,8 @@ public class SequenceDiagram extends AbstractSequenceElement {
private LinkedHashSet<State> allOrderedStatesCache;
+ private List<ISequenceEvent> allDelimitedEventsCache;
+
/**
* Constructor.
*
@@ -703,15 +705,32 @@ public class SequenceDiagram extends AbstractSequenceElement {
* @return all sequence events on the given diagram.
*/
public Iterable<? extends ISequenceEvent> getAllDelimitedSequenceEvents() {
- Function<View, ? extends ISequenceEvent> getISE = new Function<View, ISequenceEvent>() {
- @Override
- public ISequenceEvent apply(View from) {
- Option<ISequenceEvent> ise = ISequenceElementAccessor.getISequenceEvent(from);
- assert ise.some() : Messages.SequenceDiagram_InternalError;
- return ise.get();
+ Iterable<? extends ISequenceEvent> allDelimitedEvents = null;
+ if (useCache) {
+ // Initialize from cache
+ allDelimitedEvents = allDelimitedEventsCache;
+ }
+
+ if (allDelimitedEvents == null) {
+ Function<View, ? extends ISequenceEvent> getISE = new Function<View, ISequenceEvent>() {
+ @Override
+ public ISequenceEvent apply(View from) {
+ Option<ISequenceEvent> ise = ISequenceElementAccessor.getISequenceEvent(from);
+ assert ise.some() : Messages.SequenceDiagram_InternalError;
+ return ise.get();
+ }
+ };
+ allDelimitedEvents = Iterables.transform(Iterables.filter(Iterables.filter(AllContents.of(getNotationDiagram()), View.class), ISequenceEvent.ISEQUENCEEVENT_NOTATION_PREDICATE), getISE);
+ if (useCache) {
+ // Store the result
+ List<ISequenceEvent> result = new ArrayList<>();
+ Iterables.addAll(result, allDelimitedEvents);
+
+ allDelimitedEventsCache = result;
+ allDelimitedEvents = allDelimitedEventsCache;
}
- };
- return Iterables.transform(Iterables.filter(Iterables.filter(AllContents.of(getNotationDiagram()), View.class), ISequenceEvent.ISEQUENCEEVENT_NOTATION_PREDICATE), getISE);
+ }
+ return allDelimitedEvents;
}
/**
@@ -772,6 +791,7 @@ public class SequenceDiagram extends AbstractSequenceElement {
this.allObservationPointsCache = null;
this.allOperandsCache = null;
this.allStatesCache = null;
+ this.allDelimitedEventsCache = null;
clearOrderedCaches();
}

Back to the top