diff options
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.java | 36 |
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(); } |