You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2016/09/26 19:27:13 UTC
svn commit: r1762367 - in /uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/cas/impl/Subiterator.java
test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
Author: schor
Date: Mon Sep 26 19:27:13 2016
New Revision: 1762367
URL: http://svn.apache.org/viewvc?rev=1762367&view=rev
Log:
[UIMA-5121] check subiterator ends up in bounds after moveTo(fs)
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java?rev=1762367&r1=1762366&r2=1762367&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java Mon Sep 26 19:27:13 2016
@@ -457,11 +457,22 @@ public class Subiterator<T extends Annot
}
} else {
// is ambiguous, may be strict, always bounded (either by annotation or begin / end
- it.moveTo(fs);
+ it.moveTo(fs); // moves to left-most
if (isBeginEndCompare) {
adjustAfterMoveToForBeginEndComparator(fsa);
}
adjustForStrictForward();
+
+ if (it.isValid()) {
+ // mark invalid if end up outside of bounds after adjustments
+ if (it.getBegin() > boundingEnd) {
+ it.moveToLast();
+ it.moveToNext(); // make invalid
+ } else if (fsIndexRepo.getAnnotationFsComparator().compare(it.get(), boundingAnnotation) < 0) {
+ it.moveToFirst();
+ it.moveToPrevious(); // make invalid
+ }
+ }
}
}
@@ -504,6 +515,17 @@ public class Subiterator<T extends Annot
it.moveToPrevious();
}
adjustForStrictForward();
+
+ if (it.isValid()) {
+ // mark invalid if end up outside of bounds after adjustments
+ if (it.getBegin() > boundingEnd) {
+ it.moveToLast();
+ it.moveToNext(); // make invalid
+ } else if (fsIndexRepo.getAnnotationFsComparator().compare(it.get(), boundingAnnotation) < 0) {
+ it.moveToFirst();
+ it.moveToPrevious(); // make invalid
+ }
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java?rev=1762367&r1=1762366&r2=1762367&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java Mon Sep 26 19:27:13 2016
@@ -240,7 +240,10 @@ public class AnnotationIteratorTest exte
AnnotationIndex<AnnotationFS> tokenIndex = cas.getAnnotationIndex(tokenType);
it = tokenIndex.subiterator(a1);
assertCount("multi equal", 0, it);
-
+ it = tokenIndex.subiterator(a1);
+ // make a new iterator that hasn't been converted to a list form internally
+ it.moveTo(cas.getDocumentAnnotation());
+ assertFalse(it.isValid());
}
/**
* The tests include: