Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java')
-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