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 2018/07/25 19:52:09 UTC
svn commit: r1836662 - in /uima/uv3/uimaj-v3/trunk/uimaj-core/src:
main/java/org/apache/uima/cas/SelectFSs.java
main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
Author: schor
Date: Wed Jul 25 19:52:09 2018
New Revision: 1836662
URL: http://svn.apache.org/viewvc?rev=1836662&view=rev
Log:
[UIMA-5845] make select get/single have consistent return or throw for get/single when nothing is found, based on setting of nullOK(). Clarify javadocs
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java?rev=1836662&r1=1836661&r2=1836662&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java Wed Jul 25 19:52:09 2018
@@ -128,15 +128,16 @@ public interface SelectFSs<T extends Fea
SelectFSs<T> allViews(boolean allViews);
/**
- * Applies to the various argument forms of the get method.
+ * Applies to the various argument forms of the get and single methods.
* Indicates that a null value should not throw an exception.
* <p>
- * Default: null is not OK as a value
+ * Calling this method is equivalent to nullOK(true).
+ * If never called, nulls are not OK by default.
* @return the updated SelectFSs object
*/
SelectFSs<T> nullOK();
/**
- * Applies to the various argument forms of the get method.
+ * Applies to the various argument forms of the get and single methods.
* Indicates that a null value should or should not throw an exception.
* <p>
* Default: null is not OK as a value
@@ -451,8 +452,8 @@ public interface SelectFSs<T extends Fea
*/
T get(); // returns first element or null if empty (unless nullOK(false) specified)
/**
- * @return first element, which must be not null
- * @throws CASRuntimeException if element is null or
+ * @return first element, verifying that the size of the selection is 1 (or maybe 0)
+ * @throws CASRuntimeException (conditioned on nullOK == false ) if element is null or
* if there is more than 1 element in the selection,
* or if the selection is empty
*/
@@ -462,6 +463,8 @@ public interface SelectFSs<T extends Fea
* @throws CASRuntimeException if there is more than 1 element in the selection.
*/
T singleOrNull(); // throws if more than 1 element, returns single or null
+
+
// next are positioning alternatives
// get(...) throws if null (unless nullOK specified)
/**
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java?rev=1836662&r1=1836661&r2=1836662&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java Wed Jul 25 19:52:09 2018
@@ -123,7 +123,6 @@ public class SelectFSs_impl <T extends F
private boolean isFollowing = false;
private boolean isPreceding = false;
- private boolean isNullOkSpecified = false; // for complex defaulting of get(), get(n)
private boolean isAltSource = false;
private BoundsUse boundsUse = null;
@@ -316,14 +315,12 @@ public class SelectFSs_impl <T extends F
@Override
public SelectFSs_impl<T> nullOK() { // applies to get() and single()
- this.isNullOK = true;
- this.isNullOkSpecified = true;
- return this;
+ this.isNullOK = true;
+ return this;
}
@Override
public SelectFSs_impl<T> nullOK(boolean bNullOk) { // applies to get() and single()
this.isNullOK = bNullOk;
- this.isNullOkSpecified = true;
return this;
}
@@ -1007,15 +1004,15 @@ public class SelectFSs_impl <T extends F
*/
@Override
public T get() {
- return getNullChk(true);
+ return getNullChk();
}
- private T getNullChk(boolean isDoSetTest) {
+ private T getNullChk() {
FSIterator<T> it = fsIterator();
if (it.isValid()) {
return it.getNvc();
}
- if ((!isDoSetTest || isNullOkSpecified) && !isNullOK) { // if not specified, isNullOK == false
+ if (!isNullOK) { // if not specified, isNullOK == false
throw new CASRuntimeException(CASRuntimeException.SELECT_GET_NO_INSTANCES, ti.getName(), maybeMsgPosition());
}
return null;
@@ -1030,7 +1027,7 @@ public class SelectFSs_impl <T extends F
@Override
public T single() {
T v = singleOrNull();
- if (v == null) {
+ if (v == null && !isNullOK) {
throw new CASRuntimeException(CASRuntimeException.SELECT_GET_NO_INSTANCES, ti.getName(), maybeMsgPosition());
}
return v;
@@ -1064,7 +1061,7 @@ public class SelectFSs_impl <T extends F
@Override
public T get(int offset) {
this.shift = offset;
- return getNullChk(false);
+ return getNullChk();
}
@Override
@@ -1082,7 +1079,7 @@ public class SelectFSs_impl <T extends F
@Override
public T get(TOP fs) {
startAt(fs);
- return getNullChk(false);
+ return getNullChk();
}
@Override
@@ -1100,7 +1097,7 @@ public class SelectFSs_impl <T extends F
@Override
public T get(TOP fs, int offset) {
startAt(fs, offset);
- return getNullChk(false);
+ return getNullChk();
}
@Override
@@ -1118,7 +1115,7 @@ public class SelectFSs_impl <T extends F
@Override
public T get(int begin, int end) {
startAt(begin, end);
- return getNullChk(false);
+ return getNullChk();
}
@Override
@@ -1136,7 +1133,7 @@ public class SelectFSs_impl <T extends F
@Override
public T get(int begin, int end, int offset) {
startAt(begin, end, offset);
- return getNullChk(false);
+ return getNullChk();
}
@Override
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java?rev=1836662&r1=1836661&r2=1836662&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java Wed Jul 25 19:52:09 2018
@@ -378,7 +378,7 @@ public class AnnotationIteratorTest exte
}
}
assertTrue(x);
- assertNull(annotIndex.select().coveredBy(3, 3).get());
+ assertNull(annotIndex.select().coveredBy(3, 3).nullOK().get());
assertNotNull(annotIndex.select().get(3));
assertNull(annotIndex.select().nullOK().coveredBy(3, 5).get(3));
x = false;