Open GoogleCodeExporter opened 9 years ago
Yes this is an issue, thanks for reporting it.
hasNext() does advance the pointer. It does not affect typical usage of the
iterator, but it's wrong nonetheless.
But I have not been able to reproduce that particular issue with Guava. The
following copies from a FilteringIterator into a Guava ImmutableCollection and
the test passes:
@Test
public void testFilteringIterator() {
List<String> testList = Arrays.asList("abc", "bcd", "cde");
FilteringIterator<String> iterator = new FilteringIterator<String>(testList.iterator()) {
@Override
public boolean isValid(String object) {
return true;
}
};
ImmutableCollection<String> immutableCollection = ImmutableList.<String>builder().addAll(iterator).build();
assertThat(immutableCollection.size(), is(3));
assertThat(immutableCollection.toString(), is("[abc, bcd, cde]"));
}
It's possible there is some other way of copying into an ImmutableCollection
that I'm not aware of could hit this issue though. As a workaround in the
meantime the usage above seems to work for me.
Thanks for reporting this, it will be fixed!
Original comment by ni...@npgall.com
on 27 Sep 2013 at 2:16
[deleted comment]
Sorry cut and past error.
It occurs when using ImmutableSet/List.copyOf(Iterator) as it uses the
hasNext() to optimize the returned List / Set. This reproduction case works
with Guava 13 and on. I had never attempted to use the builder in place of the
copyOf method and so hit this right away.
@Test
public void testFilteringIterator() {
List<String> testList = Arrays.asList("abc", "bcd", "cde");
FilteringIterator<String> iterator = new FilteringIterator<String>(testList.iterator()) {
@Override
public boolean isValid(String object) {
return true;
}
};
ImmutableCollection<String> immutableCollection = ImmutableList.copyOf(iterator);
assertThat(immutableCollection.size(), is(3));
assertThat(immutableCollection.toString(), is("[abc, bcd, cde]"));
}
Original comment by gabe.hi...@gmail.com
on 27 Sep 2013 at 5:20
Original comment by ni...@npgall.com
on 2 Oct 2013 at 9:36
Fixed in trunk, by applying your patch. Many thanks Gabe!
I will leave this issue open until included in the next binary release,
hopefully next week or so.
Original comment by ni...@npgall.com
on 2 Oct 2013 at 10:45
Fixed in release 1.2.4. Many thanks!
Original comment by ni...@npgall.com
on 22 Nov 2013 at 10:01
Original issue reported on code.google.com by
gabe.hi...@gmail.com
on 26 Sep 2013 at 5:25Attachments: