Remove the SUBSIZED characteristic from filtered streams ... not just SIZED. Author: lowasser Change-Id: Ided646c04907b2095437e504b4e7af0b462b0e74 Review-Link: https://gwt-review.googlesource.com/#/c/18460/
diff --git a/user/super/com/google/gwt/emul/java/lang/Double.java b/user/super/com/google/gwt/emul/java/lang/Double.java index 173a63c..f41d44b 100644 --- a/user/super/com/google/gwt/emul/java/lang/Double.java +++ b/user/super/com/google/gwt/emul/java/lang/Double.java
@@ -18,7 +18,6 @@ import static javaemul.internal.InternalPreconditions.checkNotNull; import javaemul.internal.JsUtils; - import jsinterop.annotations.JsMethod; /**
diff --git a/user/super/com/google/gwt/emul/java/util/stream/DoubleStreamImpl.java b/user/super/com/google/gwt/emul/java/util/stream/DoubleStreamImpl.java index 5353a05..0669293 100644 --- a/user/super/com/google/gwt/emul/java/util/stream/DoubleStreamImpl.java +++ b/user/super/com/google/gwt/emul/java/util/stream/DoubleStreamImpl.java
@@ -367,7 +367,9 @@ private boolean found; public FilterSpliterator(DoublePredicate filter, Spliterator.OfDouble original) { - super(original.estimateSize(), original.characteristics() & ~Spliterator.SIZED); + super( + original.estimateSize(), + original.characteristics() & ~(Spliterator.SIZED | Spliterator.SUBSIZED)); checkNotNull(filter); this.filter = filter; this.original = original;
diff --git a/user/super/com/google/gwt/emul/java/util/stream/IntStreamImpl.java b/user/super/com/google/gwt/emul/java/util/stream/IntStreamImpl.java index 6839314..ca6d158 100644 --- a/user/super/com/google/gwt/emul/java/util/stream/IntStreamImpl.java +++ b/user/super/com/google/gwt/emul/java/util/stream/IntStreamImpl.java
@@ -380,7 +380,9 @@ private boolean found; public FilterSpliterator(IntPredicate filter, Spliterator.OfInt original) { - super(original.estimateSize(), original.characteristics() & ~Spliterator.SIZED); + super( + original.estimateSize(), + original.characteristics() & ~(Spliterator.SIZED | Spliterator.SUBSIZED)); checkNotNull(filter); this.filter = filter; this.original = original;
diff --git a/user/super/com/google/gwt/emul/java/util/stream/LongStreamImpl.java b/user/super/com/google/gwt/emul/java/util/stream/LongStreamImpl.java index ee9a379..b4c504e 100644 --- a/user/super/com/google/gwt/emul/java/util/stream/LongStreamImpl.java +++ b/user/super/com/google/gwt/emul/java/util/stream/LongStreamImpl.java
@@ -372,7 +372,9 @@ private boolean found; public FilterSpliterator(LongPredicate filter, Spliterator.OfLong original) { - super(original.estimateSize(), original.characteristics() & ~Spliterator.SIZED); + super( + original.estimateSize(), + original.characteristics() & ~(Spliterator.SIZED | Spliterator.SUBSIZED)); checkNotNull(filter); this.filter = filter; this.original = original;
diff --git a/user/super/com/google/gwt/emul/java/util/stream/StreamImpl.java b/user/super/com/google/gwt/emul/java/util/stream/StreamImpl.java index 1126fc6..8918a1c 100644 --- a/user/super/com/google/gwt/emul/java/util/stream/StreamImpl.java +++ b/user/super/com/google/gwt/emul/java/util/stream/StreamImpl.java
@@ -403,7 +403,9 @@ private boolean found; public FilterSpliterator(Predicate<? super T> filter, Spliterator<T> original) { - super(original.estimateSize(), original.characteristics() & ~Spliterator.SIZED); + super( + original.estimateSize(), + original.characteristics() & ~(Spliterator.SIZED | Spliterator.SUBSIZED)); checkNotNull(filter); this.filter = filter; this.original = original;
diff --git a/user/test/com/google/gwt/emultest/java8/util/stream/DoubleStreamTest.java b/user/test/com/google/gwt/emultest/java8/util/stream/DoubleStreamTest.java index f8f6715..68140c7 100644 --- a/user/test/com/google/gwt/emultest/java8/util/stream/DoubleStreamTest.java +++ b/user/test/com/google/gwt/emultest/java8/util/stream/DoubleStreamTest.java
@@ -165,6 +165,14 @@ DoubleStream.of(1d, 2d, 3d).filter(i -> data[0] |= true); assertFalse(data[0]); + // Nothing's *defined* to care about the Spliterator characteristics, but the implementation + // can't actually know the size before executing, so we check the characteristics explicitly. + assertFalse( + DoubleStream.of(1d, 2d, 3d) + .filter(a -> a == 1d) + .spliterator() + .hasCharacteristics(Spliterator.SIZED | Spliterator.SUBSIZED)); + // one result assertEquals( new double[] {1d}, DoubleStream.of(1d, 2d, 3d, 4d, 3d).filter(a -> a == 1).toArray());
diff --git a/user/test/com/google/gwt/emultest/java8/util/stream/IntStreamTest.java b/user/test/com/google/gwt/emultest/java8/util/stream/IntStreamTest.java index 8b72465..5fea722 100644 --- a/user/test/com/google/gwt/emultest/java8/util/stream/IntStreamTest.java +++ b/user/test/com/google/gwt/emultest/java8/util/stream/IntStreamTest.java
@@ -178,6 +178,14 @@ IntStream.of(1, 2, 3).filter(i -> data[0] |= true); assertFalse(data[0]); + // Nothing's *defined* to care about the Spliterator characteristics, but the implementation + // can't actually know the size before executing, so we check the characteristics explicitly. + assertFalse( + IntStream.of(1, 2, 3) + .filter(a -> a == 1) + .spliterator() + .hasCharacteristics(Spliterator.SIZED | Spliterator.SUBSIZED)); + // one result assertEquals(new int[] {1}, IntStream.of(1, 2, 3, 4, 3).filter(a -> a == 1).toArray()); // zero results
diff --git a/user/test/com/google/gwt/emultest/java8/util/stream/LongStreamTest.java b/user/test/com/google/gwt/emultest/java8/util/stream/LongStreamTest.java index 0efee03..ff76477 100644 --- a/user/test/com/google/gwt/emultest/java8/util/stream/LongStreamTest.java +++ b/user/test/com/google/gwt/emultest/java8/util/stream/LongStreamTest.java
@@ -177,6 +177,14 @@ LongStream.of(1L, 2L, 3L).filter(i -> data[0] |= true); assertFalse(data[0]); + // Nothing's *defined* to care about the Spliterator characteristics, but the implementation + // can't actually know the size before executing, so we check the characteristics explicitly. + assertFalse( + LongStream.of(1L, 2L, 3L) + .filter(a -> a == 1L) + .spliterator() + .hasCharacteristics(Spliterator.SIZED | Spliterator.SUBSIZED)); + // one result assertEquals(new long[] {1L}, LongStream.of(1L, 2L, 3L, 4L, 3L).filter(a -> a == 1).toArray()); // zero results
diff --git a/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java b/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java index 1e0b5a0..bfb828a 100644 --- a/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java +++ b/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java
@@ -231,6 +231,14 @@ Stream.of(1, 2, 3).filter(i -> data[0] |= true); assertFalse(data[0]); + // Nothing's *defined* to care about the Spliterator characteristics, but the implementation + // can't actually know the size before executing, so we check the characteristics explicitly. + assertFalse( + Stream.of("a", "b", "c", "d", "c") + .filter(a -> a.equals("a")) + .spliterator() + .hasCharacteristics(Spliterator.SIZED | Spliterator.SUBSIZED)); + // one result assertEquals( Collections.singletonList("a"),