Project

Profile

Help

Bug #4890

closed

DotNetIterator class doesn't implement hasNext() correctly

Added by Michael Kay about 3 years ago. Updated about 3 years ago.

Status:
Closed
Priority:
Low
Category:
.NET API
Sprint/Milestone:
-
Start date:
2021-02-04
Due date:
% Done:

100%

Estimated time:
Legacy ID:
Applies to branch:
10
Fix Committed on Branch:
10, trunk
Fixed in Maintenance Release:
Platforms:

Description

This problem may be asymptomatic, but the class net.sf.saxon.dotnet.DotNetIterator, which is used on the .NET product to bridge a C# IEnumerator to a Java Iterator, is incorrect. According to the contract for java.lang.Iterator, the hasNext() method should leave the state of the iterator unchanged, but we're calling MoveNext(), which means that if you make two calls on hasNext() without an intervening call on next(), the iterator will change position.

It works so long as the caller calls hasNext() exactly once between successive calls on next().

Actions #1

Updated by Michael Kay about 3 years ago

  • Subject changed from DotNotIterator doesn't implement hasNext() correctly to DotNetIterator class doesn't implement hasNext() correctly
Actions #2

Updated by Michael Kay about 3 years ago

I think the correct logic would be:

public class IteratorFromEnumerator<T> : java.util.Iterator<T> {
        private IEnumerator<T> enumerator;
        private bool moreToCome ;
        public IteratorFromEnumerator(IEnumerator<T> enumerator) {
            this.enumerator = enumerator;
            this.moreToCome = enumerator.MoveNext();
        }
        public bool hasNext() {
            return moreToCome;
        }

        public T next() {
            T nextItem = enumerator.Current;
            this.moreToCome = enumerator.MoveNext();
            return nextItem;
        }
    }
Actions #3

Updated by O'Neil Delpratt about 3 years ago

  • Assignee changed from Michael Kay to O'Neil Delpratt
Actions #4

Updated by O'Neil Delpratt about 3 years ago

  • Status changed from New to Resolved
  • % Done changed from 0 to 100
  • Applies to branch 10 added
  • Fix Committed on Branch 10, trunk added

Bug fixed and committed to git repository.

Actions #5

Updated by O'Neil Delpratt about 3 years ago

  • Status changed from Resolved to Closed
  • Fixed in Maintenance Release 10.5 added

Bug fix applied to Saxon 10.5 maintenance release.

Please register to edit this issue

Also available in: Atom PDF