diff options
author | Ed Willink | 2017-05-15 11:09:04 +0000 |
---|---|---|
committer | Ed Willink | 2017-05-15 11:09:04 +0000 |
commit | be16994a2f2d0e277095c764a7ab71b8414a4d61 (patch) | |
tree | c61e57752f1fc01e91fb0f365f013d01b8e969a8 | |
parent | 606983bcc4aedda776fc13e62f90e378f427c75d (diff) | |
download | org.eclipse.ocl-ewillink/509670a.tar.gz org.eclipse.ocl-ewillink/509670a.tar.xz org.eclipse.ocl-ewillink/509670a.zip |
[509670] Limit length of lazy iterator daisy chainsewillink/509670a
21 files changed, 73 insertions, 28 deletions
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendAllIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendAllIterator.java index d446ad3fd5..7bd0e447f2 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendAllIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendAllIterator.java @@ -45,7 +45,7 @@ public abstract class AppendAllIterator extends LazyCollectionValueImpl protected final @NonNull BaggableIterator<@Nullable Object> appendIterator; protected AppendAllIterator(@NonNull CollectionValue sourceValue, @NonNull CollectionValue appendedValue) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.appendedValue = appendedValue; this.sourceIterator = baggableIterator(sourceValue); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendIterator.java index 969f1ea18e..0e84dac376 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendIterator.java @@ -44,7 +44,7 @@ public abstract class AppendIterator extends LazyCollectionValueImpl protected boolean doneAppend = false; public AppendIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull CollectionValue sourceValue, @Nullable Object object) { - super(collectionTypeId); + super(collectionTypeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); this.object = object; diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsBagIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsBagIterator.java index 5440d39c58..344d573134 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsBagIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsBagIterator.java @@ -32,7 +32,7 @@ public abstract class AsBagIterator extends LazyCollectionValueImpl implements B private final @NonNull Iterator<? extends Object> sourceIterator; protected AsBagIterator(@NonNull CollectionTypeId typeId, @NonNull Iterator<? extends Object> sourceIterator, boolean sourceIteratorIsBagLike) { - super(typeId); + super(typeId, lazyDepth(sourceIterator)); this.sourceIterator = sourceIterator; assert !isOrdered(); assert !isUnique(); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsEcoreIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsEcoreIterator.java index b40a35628e..52744f559c 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsEcoreIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsEcoreIterator.java @@ -33,7 +33,7 @@ public class AsEcoreIterator extends LazyCollectionValueImpl private final @NonNull BaggableIterator<@Nullable Object> sourceIterator; public AsEcoreIterator(@NonNull CollectionValue sourceValue, @NonNull IdResolver idResolver, @Nullable Class<?> instanceClass) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.idResolver = idResolver; this.instanceClass = instanceClass; diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsOrderedSetIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsOrderedSetIterator.java index 1b61eda3c7..7a98e29964 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsOrderedSetIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsOrderedSetIterator.java @@ -35,7 +35,7 @@ public abstract class AsOrderedSetIterator extends LazyCollectionValueImpl imple private final @NonNull Iterator<? extends Object> sourceIterator; protected AsOrderedSetIterator(@NonNull CollectionTypeId typeId, @NonNull Iterator<? extends Object> sourceIterator, boolean sourceIteratorIsUnique) { - super(typeId); + super(typeId, lazyDepth(sourceIterator)); this.sourceIterator = sourceIterator; assert isOrdered(); assert isUnique(); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSequenceIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSequenceIterator.java index 5083bc2299..519e1fcfb2 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSequenceIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSequenceIterator.java @@ -33,7 +33,7 @@ public abstract class AsSequenceIterator extends LazyCollectionValueImpl impleme private final @NonNull Iterator<? extends Object> sourceIterator; protected AsSequenceIterator(@NonNull CollectionTypeId typeId, @NonNull Iterator<? extends Object> sourceIterator) { - super(typeId); + super(typeId, lazyDepth(sourceIterator)); this.sourceIterator = sourceIterator; assert isOrdered(); assert !isUnique(); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSetIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSetIterator.java index 39866a0021..53226b0bb7 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSetIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSetIterator.java @@ -34,7 +34,7 @@ public abstract class AsSetIterator extends LazyCollectionValueImpl implements S private final @NonNull Iterator<? extends Object> sourceIterator; protected AsSetIterator(@NonNull CollectionTypeId typeId, @NonNull Iterator<? extends Object> sourceIterator, boolean sourceIteratorIsUnique) { - super(typeId); + super(typeId, lazyDepth(sourceIterator)); this.sourceIterator = sourceIterator; assert !isOrdered(); assert isUnique(); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/CollectionLiteralIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/CollectionLiteralIterator.java index a30e3b9748..b53361bd2e 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/CollectionLiteralIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/CollectionLiteralIterator.java @@ -43,7 +43,7 @@ public class CollectionLiteralIterator extends LazyCollectionValueImpl private int lastInt = -1; public CollectionLiteralIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull List<@Nullable Object> literalElements) { - super(collectionTypeId); + super(collectionTypeId, 0); this.literalElements = literalElements; this.literalIterator = literalElements.iterator(); if (!isSequence()) { diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingAllIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingAllIterator.java index e5ad676614..927fe8b7e2 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingAllIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingAllIterator.java @@ -33,7 +33,7 @@ public class ExcludingAllIterator extends LazyCollectionValueImpl private final @NonNull CollectionValue excludeValue; public ExcludingAllIterator(@NonNull CollectionValue sourceValue, @NonNull CollectionValue excludeValue) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); this.excludeValue = eagerCollectionValue(excludeValue); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingIterator.java index 9355abd0eb..3b535abf6b 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingIterator.java @@ -39,7 +39,7 @@ public class ExcludingIterator extends LazyCollectionValueImpl private final @NonNull EqualsStrategy equalsStrategy; public ExcludingIterator(@NonNull CollectionValue sourceValue, @Nullable Object object) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); this.object = object; diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/FlattenIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/FlattenIterator.java index 8094ea7cbd..1d12d637ee 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/FlattenIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/FlattenIterator.java @@ -82,7 +82,7 @@ public class FlattenIterator extends LazyCollectionValueImpl private @Nullable Stack<@NonNull BaggableIterator<@Nullable Object>> iteratorStack = null; public FlattenIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull CollectionValue sourceValue) { - super(collectionTypeId); + super(collectionTypeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); } diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingAllIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingAllIterator.java index 1f410ed7ad..59b5210473 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingAllIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingAllIterator.java @@ -57,7 +57,7 @@ public abstract class IncludingAllIterator extends LazyCollectionValueImpl protected final @NonNull BaggableIterator<@Nullable Object> includeIterator; public IncludingAllIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull CollectionValue sourceValue, @NonNull CollectionValue includeValue) { - super(collectionTypeId); + super(collectionTypeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.includeValue = includeValue; this.sourceIterator = baggableIterator(sourceValue); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingIterator.java index cb5b7b020a..8646079ed5 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingIterator.java @@ -48,7 +48,7 @@ public abstract class IncludingIterator extends LazyCollectionValueImpl protected boolean doneInclude = false; public IncludingIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull CollectionValue sourceValue, @Nullable Object object) { - super(collectionTypeId); + super(collectionTypeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); this.object = object; diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IntersectionIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IntersectionIterator.java index 92928e05ed..c2e36b6f06 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IntersectionIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IntersectionIterator.java @@ -47,7 +47,7 @@ public class IntersectionIterator extends LazyCollectionValueImpl private final @NonNull BaggableIterator<@Nullable Object> secondIterator; public IntersectionIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull CollectionValue sourceValue, @NonNull CollectionValue secondValue) { - super(collectionTypeId); + super(collectionTypeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.secondValue = secondValue; this.secondIterator = baggableIterator(secondValue); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/LazyCollectionValueImpl.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/LazyCollectionValueImpl.java index b4d6032846..277cdfe51f 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/LazyCollectionValueImpl.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/LazyCollectionValueImpl.java @@ -85,6 +85,13 @@ import com.google.common.collect.Lists; */ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyCollectionValue, LazyIterator { + /** + * Arbitrary nesting of lazy iterators can run out of stack, so eager iterables are needed every so often. + * Too often and memory is wasted. For one nested Sequence::including test, speed degraded increasingly below + * a limit of 15 daisy chained lazy iterators. + */ + public static int LAZY_DEPTH_TRAP = 15; + @SuppressWarnings("serial") private static final class UnmodifiableEcoreObjects extends EcoreEList.UnmodifiableEList<@Nullable Object> { @@ -132,11 +139,38 @@ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyC s.append("}"); } + /** + * Return the number of cascaded lazy iterators terminating in sourceValue. + */ + protected static int lazyDepth(@NonNull Object sourceValue) { + if (!(sourceValue instanceof LazyCollectionValueImpl)) { + return 0; + } + LazyCollectionValueImpl lazySource = (LazyCollectionValueImpl)sourceValue; + if (lazySource.lazyIterable != null) { + return 0; + } + else { + return lazySource.lazyDepth+1; + } + } + + /** + * The type of the resulting collection. + */ protected final @NonNull CollectionTypeId typeId; + /** + * The Bag/Sequence/Unqiue strategy applicable prior to any mutation. + */ private final @NonNull CollectionStrategy initialCollectionStrategy; /** + * THe number of preceding lazy iterators feeding this lazy collection. + */ + private final int lazyDepth; + + /** * The hashCode of the boxed values in this collection. */ private int hashCode = 0; @@ -170,9 +204,10 @@ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyC */ private int useCount = 0; - protected LazyCollectionValueImpl(@NonNull CollectionTypeId typeId) { + protected LazyCollectionValueImpl(@NonNull CollectionTypeId typeId, int lazyDepth) { this.typeId = typeId; this.initialCollectionStrategy = LazyIterable.getCollectionStrategy(typeId); + this.lazyDepth = lazyDepth; } // @Override @@ -187,13 +222,17 @@ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyC @Override public @NonNull BagValue asBagValue() { - eagerIterable(); // Force an InvalidValueEception to be thrown for any invalid element + if (lazyDepth >= LAZY_DEPTH_TRAP) { + eagerIterable(); + } return new AsBagIterator.FromCollectionValue(this); } @Override public @NonNull CollectionValue asCollectionValue() { - eagerIterable(); // Force an InvalidValueEception to be thrown for any invalid element + if (lazyDepth >= LAZY_DEPTH_TRAP) { + eagerIterable(); + } return this; } @@ -242,7 +281,7 @@ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyC @Override public @NonNull List<@Nullable Object> asEcoreObject(@NonNull IdResolver idResolver, @Nullable Class<?> instanceClass) { - // eagerIterable(); // Force an InvalidValueEception to be thrown for any invalid element + // eagerIterable(); // Force an InvalidValueException to be thrown for any invalid element // return new AsEcoreIterator(this, idResolver, instanceClass).getListOfElements(); @Nullable Object[] unboxedValues = new @Nullable Object[intSize()]; int i= 0; @@ -279,19 +318,25 @@ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyC @Override public @NonNull OrderedSetValue asOrderedSetValue() { - eagerIterable(); // Force an InvalidValueEception to be thrown for any invalid element + if (lazyDepth >= LAZY_DEPTH_TRAP) { + eagerIterable(); + } return new AsOrderedSetIterator.FromCollectionValue(this); } @Override public @NonNull SequenceValue asSequenceValue() { - eagerIterable(); // Force an InvalidValueEception to be thrown for any invalid element + if (lazyDepth >= LAZY_DEPTH_TRAP) { + eagerIterable(); + } return new AsSequenceIterator.FromCollectionValue(this); } @Override public @NonNull SetValue asSetValue() { - eagerIterable(); // Force an InvalidValueEception to be thrown for any invalid element + if (lazyDepth >= LAZY_DEPTH_TRAP) { + eagerIterable(); + } return new AsSetIterator.FromCollectionValue(this); } @@ -376,7 +421,7 @@ public abstract class LazyCollectionValueImpl extends ValueImpl implements LazyC @Override public @NonNull LazyIterable eagerIterable() { LazyIterable lazyIterable2 = cachedIterable(); - lazyIterable2.size(); + lazyIterable2.getListOfElements(); return lazyIterable2; } diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependAllIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependAllIterator.java index 10c4795cdd..213ab265f5 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependAllIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependAllIterator.java @@ -45,7 +45,7 @@ public abstract class PrependAllIterator extends LazyCollectionValueImpl protected final @NonNull BaggableIterator<@Nullable Object> prependIterator; public PrependAllIterator(@NonNull CollectionValue sourceValue, @NonNull CollectionValue prependValue) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.prependValue = prependValue; this.sourceIterator = baggableIterator(sourceValue); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependIterator.java index 769272ceb7..c109c2c1b7 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependIterator.java @@ -48,7 +48,7 @@ public abstract class PrependIterator extends LazyCollectionValueImpl protected int prependCount = 0; public PrependIterator(@NonNull CollectionTypeId collectionTypeId, @NonNull CollectionValue sourceValue, @Nullable Object object) { - super(collectionTypeId); + super(collectionTypeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.object = object; this.sourceIterator = baggableIterator(sourceValue); diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SelectIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SelectIterator.java index b38e41315e..98caa04f1d 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SelectIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SelectIterator.java @@ -26,7 +26,7 @@ public abstract class SelectIterator extends LazyCollectionValueImpl private final @NonNull BaggableIterator<Object> sourceIterator; protected SelectIterator(@NonNull CollectionTypeId typeId, @NonNull CollectionValue sourceValue) { - super(typeId); + super(typeId, lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); } diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubOrderedSetIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubOrderedSetIterator.java index bc6b6e9f4f..c15e813597 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubOrderedSetIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubOrderedSetIterator.java @@ -37,7 +37,7 @@ public class SubOrderedSetIterator extends LazyCollectionValueImpl private int size = 0; public SubOrderedSetIterator(@NonNull CollectionValue sourceValue, int lower, int upper) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); this.lower = lower; diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubSequenceIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubSequenceIterator.java index 2c1a1e2df4..2fface0f4a 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubSequenceIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubSequenceIterator.java @@ -37,7 +37,7 @@ public class SubSequenceIterator extends LazyCollectionValueImpl private int size = 0; public SubSequenceIterator(@NonNull CollectionValue sourceValue, int lower, int upper) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); this.sourceValue = sourceValue; this.sourceIterator = baggableIterator(sourceValue); this.lower = lower; diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SymmetricDifferenceIterator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SymmetricDifferenceIterator.java index f6b8fd178e..454f2f106d 100644 --- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SymmetricDifferenceIterator.java +++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SymmetricDifferenceIterator.java @@ -34,7 +34,7 @@ public class SymmetricDifferenceIterator extends LazyCollectionValueImpl private final @NonNull BaggableIterator<@Nullable Object> otherIterator; public SymmetricDifferenceIterator(@NonNull CollectionValue sourceValue, @NonNull CollectionValue otherValue) { - super(sourceValue.getTypeId()); + super(sourceValue.getTypeId(), lazyDepth(sourceValue)); eagerIterable(sourceValue); eagerIterable(otherValue); this.sourceValue = sourceValue; |