Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2017-05-15 11:09:04 +0000
committerEd Willink2017-05-15 11:09:04 +0000
commitbe16994a2f2d0e277095c764a7ab71b8414a4d61 (patch)
treec61e57752f1fc01e91fb0f365f013d01b8e969a8
parent606983bcc4aedda776fc13e62f90e378f427c75d (diff)
downloadorg.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
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendAllIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AppendIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsBagIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsEcoreIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsOrderedSetIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSequenceIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/AsSetIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/CollectionLiteralIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingAllIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/ExcludingIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/FlattenIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingAllIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IncludingIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/IntersectionIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/LazyCollectionValueImpl.java61
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependAllIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/PrependIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SelectIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubOrderedSetIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SubSequenceIterator.java2
-rw-r--r--plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/iterators/SymmetricDifferenceIterator.java2
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;

Back to the top