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 2017/10/17 13:11:48 UTC

svn commit: r1812398 - in /uima/uv3/uimaj-v3/trunk/uimaj-core/src: main/java/org/apache/uima/cas/ main/java/org/apache/uima/jcas/cas/ test/java/org/apache/uima/jcas/test/

Author: schor
Date: Tue Oct 17 13:11:47 2017
New Revision: 1812398

URL: http://svn.apache.org/viewvc?rev=1812398&view=rev
Log:
[UIMA-5620] adding generics, add isEmpty() to lists, add contains() to lists and most arrays

Modified:
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/BooleanArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ByteArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/CommonArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/DoubleArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIndex.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FloatArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/IntArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/LongArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ShortArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/StringArrayFS.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ArrayFSImpl.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSHashSet.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArrayList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ArrayFS.java Tue Oct 17 13:11:47 2017
@@ -19,12 +19,14 @@
 
 package org.apache.uima.cas;
 
+import org.apache.uima.jcas.cas.TOP;
+
 /**
  * Feature structure array interface. To create a FS array object, use
  * {@link org.apache.uima.cas.CAS#createArrayFS(int length)} or
  * new FSArray(aJCas, length)
  */
-public interface ArrayFS extends CommonArrayFS {
+public interface ArrayFS<E extends FeatureStructure> extends CommonArrayFS<E> {
 
   /**
    * Get the i-th feature structure from the array.
@@ -33,7 +35,7 @@ public interface ArrayFS extends CommonA
    * @exception ArrayIndexOutOfBoundsException
    *              If the index is out of bounds.
    */
-  FeatureStructure get(int i) throws ArrayIndexOutOfBoundsException;
+  <U extends TOP> U get(int i) throws ArrayIndexOutOfBoundsException;
 
   /**
    * Set the i-th value.
@@ -45,7 +47,7 @@ public interface ArrayFS extends CommonA
    * @exception ArrayIndexOutOfBoundsException
    *              If <code>i</code> is out of bounds.
    */
-  void set(int i, FeatureStructure fs) throws ArrayIndexOutOfBoundsException;
+  void set(int i, E fs) throws ArrayIndexOutOfBoundsException;
 
   /**
    * Copy the contents of the array from <code>start</code> to <code>end</code> to the
@@ -81,7 +83,7 @@ public interface ArrayFS extends CommonA
    *              If <code>srcOffset &lt; 0</code> or <code>length &gt; size()</code> or
    *              <code>destOffset + length &gt; destArray.length</code>.
    */
-  void copyFromArray(FeatureStructure[] src, int srcOffset, int destOffset, int length)
+  <T extends E> void copyFromArray(T[] src, int srcOffset, int destOffset, int length)
       throws ArrayIndexOutOfBoundsException;
 
   /**
@@ -90,5 +92,7 @@ public interface ArrayFS extends CommonA
    * @return A Java array copy of this FS array.
    */
   FeatureStructure[] toArray();
+  
+  TOP[] toArray(TOP[] a);
 
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/BooleanArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/BooleanArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/BooleanArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/BooleanArrayFS.java Tue Oct 17 13:11:47 2017
@@ -24,7 +24,7 @@ package org.apache.uima.cas;
  * {@link org.apache.uima.cas.CAS#createBooleanArrayFS CAS.createBooleanArrayFS(int)} or
  * new BooleanArray(aJCas, length) 
  */
-public interface BooleanArrayFS extends CommonArrayFS {
+public interface BooleanArrayFS extends CommonArrayFS<Boolean> {
 
   /**
    * Get the i-th string from the array.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ByteArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ByteArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ByteArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ByteArrayFS.java Tue Oct 17 13:11:47 2017
@@ -24,7 +24,7 @@ package org.apache.uima.cas;
  * {@link org.apache.uima.cas.CAS#createByteArrayFS CAS.createByteArrayFS(int)}
  * or new ByteArray(aJCas, length)
  */
-public interface ByteArrayFS extends CommonArrayFS {
+public interface ByteArrayFS extends CommonArrayFS<Byte> {
 
   /**
    * Get the i-th string from the array.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/CommonArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/CommonArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/CommonArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/CommonArrayFS.java Tue Oct 17 13:11:47 2017
@@ -21,8 +21,10 @@ package org.apache.uima.cas;
 
 /**
  * Common parts of the Array interfaces.
+ * Doesn't implement AbstactNonModifiableCollection because
+ *   the specializations of things like toArray using primitives don't work
  */
-public interface CommonArrayFS extends FeatureStructure {
+public interface CommonArrayFS<E> extends FeatureStructure {
 
   /**
    * Return the size of the array.
@@ -105,5 +107,12 @@ public interface CommonArrayFS extends F
    * Copy values from another array of the same kind
    * @param v the other array
    */
-  void copyValuesFrom(CommonArrayFS v);
+  void copyValuesFrom(CommonArrayFS<E> v);
+  
+  /**
+   * @return true if the array is empty
+   */
+  default boolean isEmpty() {
+    return size() == 0;
+  }
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/DoubleArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/DoubleArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/DoubleArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/DoubleArrayFS.java Tue Oct 17 13:11:47 2017
@@ -25,7 +25,7 @@ package org.apache.uima.cas;
  * 
  * 
  */
-public interface DoubleArrayFS extends CommonArrayFS {
+public interface DoubleArrayFS extends CommonArrayFS<Double> {
 
   /**
    * Get the i-th element from the array.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIndex.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIndex.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIndex.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FSIndex.java Tue Oct 17 13:11:47 2017
@@ -19,6 +19,7 @@
 
 package org.apache.uima.cas;
 
+import java.util.Collection;
 import java.util.stream.Stream;
 
 /**
@@ -64,7 +65,7 @@ import java.util.stream.Stream;
  * @param T the topmost type in this Index
  * 
  */
-public interface FSIndex<T extends FeatureStructure> extends Iterable<T> {
+public interface FSIndex<T extends FeatureStructure> extends Collection<T> {
 
   /**
    * Indexing strategy: sorted index. A sorted index contains all elements, including duplicates.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FloatArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FloatArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FloatArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/FloatArrayFS.java Tue Oct 17 13:11:47 2017
@@ -26,7 +26,7 @@ package org.apache.uima.cas;
  * 
  * 
  */
-public interface FloatArrayFS extends CommonArrayFS {
+public interface FloatArrayFS extends CommonArrayFS<Float> {
 
   /**
    * Get the element at position <code>index</code>.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/IntArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/IntArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/IntArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/IntArrayFS.java Tue Oct 17 13:11:47 2017
@@ -24,7 +24,7 @@ package org.apache.uima.cas;
  * {@link org.apache.uima.cas.CAS#createIntArrayFS CAS.createIntArrayFS(int)} or
  * new IntegerArray(aJCas, length)
  */
-public interface IntArrayFS extends CommonArrayFS {
+public interface IntArrayFS extends CommonArrayFS<Integer> {
 
   /**
    * Get the element at position <code>index</code>.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/LongArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/LongArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/LongArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/LongArrayFS.java Tue Oct 17 13:11:47 2017
@@ -24,7 +24,7 @@ package org.apache.uima.cas;
  * {@link org.apache.uima.cas.CAS#createLongArrayFS CAS.createLongArrayFS(int)}
  * or new LongArray(aJCas, length)
  */
-public interface LongArrayFS extends CommonArrayFS {
+public interface LongArrayFS extends CommonArrayFS<Long> {
 
   /**
    * Get the i-th element from the array.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ShortArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ShortArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ShortArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/ShortArrayFS.java Tue Oct 17 13:11:47 2017
@@ -24,7 +24,7 @@ package org.apache.uima.cas;
  * {@link org.apache.uima.cas.CAS#createShortArrayFS CAS.createShortArrayFS(int)} or
  * new ShortArray(aJCas, length)
  */
-public interface ShortArrayFS extends CommonArrayFS {
+public interface ShortArrayFS extends CommonArrayFS<Short> {
 
   /**
    * Get the i-th element from the array.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/StringArrayFS.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/StringArrayFS.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/StringArrayFS.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/StringArrayFS.java Tue Oct 17 13:11:47 2017
@@ -24,7 +24,7 @@ package org.apache.uima.cas;
  * {@link org.apache.uima.cas.CAS#createStringArrayFS CAS.createStringArrayFS(int)}
  * or new StringArray(aJCas, length)
  */
-public interface StringArrayFS extends CommonArrayFS {
+public interface StringArrayFS extends CommonArrayFS<String> {
 
   /**
    * Get the i-th string from the array.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ArrayFSImpl.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ArrayFSImpl.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ArrayFSImpl.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ArrayFSImpl.java Tue Oct 17 13:11:47 2017
@@ -19,6 +19,7 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.ArrayFS;
+import org.apache.uima.cas.FeatureStructure;
 
 /**
  * For backwards compatibility with V2, only
@@ -26,6 +27,6 @@ import org.apache.uima.cas.ArrayFS;
  * @deprecated use FSArray instead
  */
 @Deprecated
-public interface ArrayFSImpl extends ArrayFS {
+public interface ArrayFSImpl<E extends FeatureStructure> extends ArrayFS<E> {
   
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java Tue Oct 17 13:11:47 2017
@@ -23,7 +23,6 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 
-import org.apache.uima.cas.BooleanArrayFS;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CommonArrayFS;
 import org.apache.uima.cas.impl.BooleanArrayFSImpl;
@@ -33,7 +32,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** JCas class model for BooleanArray */
-public final class BooleanArray extends TOP implements CommonPrimitiveArray, BooleanArrayFSImpl, Iterable<Boolean> {
+public final class BooleanArray extends TOP implements CommonPrimitiveArray<Boolean>, BooleanArrayFSImpl, Iterable<Boolean> {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_BOOLEAN_ARRAY;
@@ -172,7 +171,7 @@ public final class BooleanArray extends
    * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
    */
   @Override
-  public void copyValuesFrom(CommonArrayFS v) {
+  public void copyValuesFrom(CommonArrayFS<Boolean> v) {
     BooleanArray bv = (BooleanArray) v;
     System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
     _casView.maybeLogArrayUpdates(this, 0, size());
@@ -216,4 +215,5 @@ public final class BooleanArray extends
     booleanArray.copyFromArray(a, 0, 0, a.length);
     return booleanArray;
   }
+  
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java Tue Oct 17 13:11:47 2017
@@ -23,7 +23,6 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 
-import org.apache.uima.cas.ByteArrayFS;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CommonArrayFS;
 import org.apache.uima.cas.impl.ByteArrayFSImpl;
@@ -33,7 +32,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** JCas class model for ByteArray */
-public final class ByteArray extends TOP implements CommonPrimitiveArray, ByteArrayFSImpl, Iterable<Byte> {
+public final class ByteArray extends TOP implements CommonPrimitiveArray<Byte>, ByteArrayFSImpl, Iterable<Byte> {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_BYTE_ARRAY;
@@ -169,7 +168,7 @@ public final class ByteArray extends TOP
    * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
    */
   @Override
-  public void copyValuesFrom(CommonArrayFS v) {
+  public void copyValuesFrom(CommonArrayFS<Byte> v) {
     ByteArray bv = (ByteArray) v;
     System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
     _casView.maybeLogArrayUpdates(this, 0, size());
@@ -213,4 +212,16 @@ public final class ByteArray extends TOP
     return byteArray;
   }
 
+  /**
+   * @param item the item to see if is in the array
+   * @return true if the item is in the array
+   */
+  public boolean contains(byte item) {
+    for (byte b : theArray) {
+      if (b == item) {
+        return true;
+      }
+    }
+    return false;
+  }
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java Tue Oct 17 13:11:47 2017
@@ -30,7 +30,6 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CASRuntimeException;
 import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.impl.CasSerializerSupport;
-import org.apache.uima.cas.impl.FeatureStructureImplC;
 import org.apache.uima.cas.impl.XmiSerializationSharedData;
 import org.apache.uima.cas.impl.XmiSerializationSharedData.OotsElementData;
 import org.apache.uima.internal.util.XmlAttribute;
@@ -289,5 +288,12 @@ public interface CommonList extends Feat
     anyListToOutput(sharedData, cds, s -> list.add(s)); 
     return list;
   }
+  
+  /**
+   * @return true if this object represents an empty list
+   */
+  default boolean isEmpty() {
+    return this instanceof EmptyList;
+  }
     
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java Tue Oct 17 13:11:47 2017
@@ -26,7 +26,7 @@ import org.apache.uima.cas.CommonArrayFS
  *   boolean, byte, short, int, long, float, double, String, JavaObject
  * Internal Use Only.
  */
-public interface CommonPrimitiveArray extends CommonArrayFS {
+public interface CommonPrimitiveArray<T> extends CommonArrayFS<T> {
   
   /**
    * Internal Use Only.

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java Tue Oct 17 13:11:47 2017
@@ -35,7 +35,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** JCas class model for DoubleArray */
-public final class DoubleArray extends TOP implements CommonPrimitiveArray, DoubleArrayFSImpl, Iterable<Double> {
+public final class DoubleArray extends TOP implements CommonPrimitiveArray<Double>, DoubleArrayFSImpl, Iterable<Double> {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_DOUBLE_ARRAY;
@@ -250,4 +250,19 @@ public final class DoubleArray extends T
       action.accept(d);
     }
   }
+
+
+  /**
+   * @param item the item to see if is in the array
+   * @return true if the item is in the array
+   */
+  public boolean contains(double item) {
+    for (double b : theArray) {
+      if (b == item) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java Tue Oct 17 13:11:47 2017
@@ -26,7 +26,7 @@ import org.apache.uima.cas.impl.TypeImpl
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class EmptyFSList extends FSList implements EmptyList {
+public class EmptyFSList<T extends TOP> extends FSList<T> implements EmptyList {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_EMPTY_FS_LIST;

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java Tue Oct 17 13:11:47 2017
@@ -36,7 +36,10 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** Java Class model for Cas FSArray type */
-public final class FSArray extends TOP implements Iterable<TOP>, ArrayFSImpl, SelectViaCopyToArray {
+public final class FSArray<T extends FeatureStructure> extends TOP 
+                           implements ArrayFSImpl<T>,
+                                      Iterable<T>,                                      
+                                      SelectViaCopyToArray {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_FS_ARRAY;
@@ -55,6 +58,7 @@ public final class FSArray extends TOP i
    * @return the type array index
    */
   // can't be factored - refs locally defined field
+  @Override
   public int getTypeIndexID() {
     return typeIndexID;
   }
@@ -107,8 +111,9 @@ public final class FSArray extends TOP i
 
 
   /** return the indexed value from the corresponding Cas FSArray as a Java Model object. */
-  public TOP get(int i) {
-    return _maybeGetPearFs(theArray[i]);
+  @Override
+  public <U extends TOP> U get(int i) {
+    return (U) _maybeGetPearFs(theArray[i]);
   }
   
   // internal use
@@ -117,13 +122,14 @@ public final class FSArray extends TOP i
   }
 
   /** updates the Cas, setting the indexed value with the corresponding Cas FeatureStructure. */
-  public void set(int i, FeatureStructure v) {
-    TOP vt = (TOP) v;
-    if (vt != null && _casView.getBaseCAS() != vt._casView.getBaseCAS()) {
+  @Override
+  public void set(int i, T av) {
+    TOP v = (TOP) av;
+    if (v != null && _casView.getBaseCAS() != v._casView.getBaseCAS()) {
       /** Feature Structure {0} belongs to CAS {1}, may not be set as the value of an array or list element in a different CAS {2}.*/
-      throw new CASRuntimeException(CASRuntimeException.FS_NOT_MEMBER_OF_CAS, vt, vt._casView, _casView);
+      throw new CASRuntimeException(CASRuntimeException.FS_NOT_MEMBER_OF_CAS, v, v._casView, _casView);
     }
-    theArray[i] = _maybeGetBaseForPearFs(vt);
+    theArray[i] = _maybeGetBaseForPearFs(v);
     _casView.maybeLogArrayUpdate(this, null, i);
   }
   
@@ -134,6 +140,7 @@ public final class FSArray extends TOP i
   }
 
   /** return the size of the array. */
+  @Override
   public int size() {
     return theArray.length;
   }
@@ -141,7 +148,8 @@ public final class FSArray extends TOP i
   /**
    * @see org.apache.uima.cas.ArrayFS#copyFromArray(FeatureStructure[], int, int, int)
    */
-  public void copyFromArray(FeatureStructure[] src, int srcPos, int destPos, int length) {
+  @Override
+  public <U extends T> void copyFromArray(U[] src, int srcPos, int destPos, int length) {
     int srcEnd = srcPos + length;
     int destEnd = destPos + length;
     if (srcPos < 0 ||
@@ -161,6 +169,7 @@ public final class FSArray extends TOP i
   /**
    * @see org.apache.uima.cas.ArrayFS#copyToArray(int, FeatureStructure[], int, int)
    */
+  @Override
   public void copyToArray(int srcPos, FeatureStructure[] dest, int destPos, int length) {
     int srcEnd = srcPos + length;
     int destEnd = destPos + length;
@@ -171,24 +180,27 @@ public final class FSArray extends TOP i
           String.format("FSArray.copyToArray, srcPos: %,d destPos: %,d length: %,d",  srcPos, destPos, length));
     }
     for (;srcPos < srcEnd && destPos < destEnd;) {
-      dest[destPos++] = _maybeGetPearFs(get(srcPos++));
+      dest[destPos++] = _maybeGetPearFs((TOP) get(srcPos++));
     }
   }
 
   /**
    * @see org.apache.uima.cas.ArrayFS#toArray()
    */
+  @Override
   public FeatureStructure[] toArray() {
     FeatureStructure[] r = new FeatureStructure[size()];
     copyToArray(0, r, 0, size());
     return r;
   }
   
+  @Override
   public FeatureStructure[] _toArrayForSelect() { return toArray(); }
 
   /**
    * Not supported, will throw UnsupportedOperationException
    */
+  @Override
   public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
     throw new UnsupportedOperationException();
   }
@@ -210,6 +222,7 @@ public final class FSArray extends TOP i
    *                    <code>length &gt; size()</code> or
    *                    <code>destPos + length &gt; destArray.length</code>.
    */
+  @Override
   public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
     _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
@@ -230,8 +243,8 @@ public final class FSArray extends TOP i
    * no conversion to Pear trampolines done
    */
   @Override
-  public void copyValuesFrom(CommonArrayFS v) {
-    FSArray bv = (FSArray) v;
+  public void copyValuesFrom(CommonArrayFS<T> v) {
+    FSArray<T> bv = (FSArray<T>) v;
     System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
     _casView.maybeLogArrayUpdates(this, 0, size());
   }
@@ -242,15 +255,15 @@ public final class FSArray extends TOP i
    * @param a -
    * @return -
    */
-  public static FSArray create(JCas jcas, FeatureStructure[] a) {
-    FSArray fsa = new FSArray(jcas, a.length);
+  public static <U extends FeatureStructure> FSArray<U> create(JCas jcas, U[] a) {
+    FSArray<U> fsa = new FSArray<U>(jcas, a.length);
     fsa.copyFromArray(a, 0, 0, a.length);
     return fsa;
   }
 
   @Override
-  public Iterator<TOP> iterator() {
-    return new Iterator<TOP>() {
+  public Iterator<T> iterator() {
+    return new Iterator<T>() {
       int i = 0;
       
       @Override
@@ -259,21 +272,57 @@ public final class FSArray extends TOP i
       }
 
       @Override
-      public TOP next() {
+      public T next() {
         if (!hasNext()) {
           throw new NoSuchElementException();
         }
-        return get(i++);  // does trampoline conversion
+        return (T) get(i++);  // does trampoline conversion
       }
     };
   }
   
   @Override
-  public Spliterator<TOP> spliterator() {
-    return Arrays.spliterator(theArray);
+  public Spliterator<T> spliterator() {
+    return (Spliterator<T>) Arrays.spliterator(theArray);
   }
   
-  public <T extends TOP> Stream<T> stream() {
-    return (Stream<T>) StreamSupport.stream(spliterator(), false);
+  public Stream<T> stream() {
+    return StreamSupport.stream(spliterator(), false);
+  }
+
+  public boolean contains(Object o) {
+    if (null == o) {
+      for (TOP e : theArray) {
+        if (e == null) {
+          return true;
+        }
+      }
+      return false;
+    }
+    
+    if (!(o instanceof TOP)) {
+      return false;
+    }
+    TOP item = (TOP) o;
+    for (TOP e : theArray) {
+      if (item.equals(e)) {
+        return true;
+      }
+    }
+    return false;
   }
+
+  public Object[] toArray(Object[] a) {
+    Object[] r = new Object[size()];
+    System.arraycopy(theArray, 0, r, 0, size()); 
+    return r;
+  }
+
+  public TOP[] toArray(TOP[] a) {
+    TOP[] r = new TOP[size()];
+    System.arraycopy(theArray, 0, r, 0, size());
+    return r;
+  }
+
+ 
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSHashSet.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSHashSet.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSHashSet.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSHashSet.java Tue Oct 17 13:11:47 2017
@@ -153,13 +153,13 @@ public class FSHashSet <T extends TOP> e
    * @generated
    * @return value of the feature 
    */
-  private FSArray getFsArray() { return (FSArray)(_getFeatureValueNc(wrapGetIntCatchException(_FH_fsArray)));}
+  private FSArray<T> getFsArray() { return (FSArray<T>)(_getFeatureValueNc(wrapGetIntCatchException(_FH_fsArray)));}
     
   /** setter for fsArray - sets internal use - holds the set of Feature Structures 
    * @generated
    * @param v value to set into the feature 
    */
-  private void setFsArray(FSArray v) {
+  private void setFsArray(FSArray<T> v) {
     _setFeatureValueNcWj(wrapGetIntCatchException(_FH_fsArray), v);
   }    
     
@@ -180,11 +180,10 @@ public class FSHashSet <T extends TOP> e
   private void lazyInit() {  
     isPendingInit = false;
     fsHashSet.clear();
-    FSArray a = getFsArray();
-    if (a != null) {
-      for (TOP fs : a) {
-        fsHashSet.add((T) fs);
-      }
+    FSArray<T> a = getFsArray();
+
+    for (T fs : a) {
+      fsHashSet.add((T) fs);
     }
   }
     
@@ -195,7 +194,7 @@ public class FSHashSet <T extends TOP> e
   public void _save_to_cas_data() {
     if (isSaveNeeded) {
       isSaveNeeded = false;
-      FSArray fsa = getFsArray();
+      FSArray<T> fsa = getFsArray();
       if (fsa == null || fsa.size() != fsHashSet.size()) {
         fsa = new FSArray(_casView.getJCasImpl(), fsHashSet.size());
         setFsArray(fsa);

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java Tue Oct 17 13:11:47 2017
@@ -21,8 +21,6 @@ package org.apache.uima.jcas.cas;
 
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.Spliterator;
-import java.util.Spliterators;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -35,7 +33,7 @@ import org.apache.uima.cas.impl.SelectFS
 import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 
-public abstract class FSList extends TOP implements CommonList, Iterable<TOP> {
+public abstract class FSList<T extends TOP> extends TOP implements CommonList, Iterable<T> {
  
 	// Never called.
 	protected FSList() {// Disable default constructor
@@ -56,20 +54,20 @@ public abstract class FSList extends TOP
      super(t, c);
    }
 	
-   public TOP getNthElement(int i) {
-     CommonList node = getNthNode(i);
+   public T getNthElement(int i) {
+     FSList<T> node = (FSList<T>) getNthNode(i);
      if (node instanceof EmptyFSList) {
        throw new CASRuntimeException(CASRuntimeException.JCAS_GET_NTH_PAST_END, Integer.toString(i));
      }
-     return ((NonEmptyFSList)node).getHead();
+     return ((NonEmptyFSList<T>)node).getHead();
    } 
    
-  public NonEmptyFSList createNonEmptyNode() {
-   return new NonEmptyFSList(this._casView.getJCasImpl());
+  public NonEmptyFSList<T> createNonEmptyNode() {
+   return new NonEmptyFSList<T>(this._casView.getJCasImpl());
   }
   
-  public NonEmptyFSList pushNode() {
-    NonEmptyFSList n = createNonEmptyNode();
+  public NonEmptyFSList<T> pushNode() {
+    NonEmptyFSList<T> n = createNonEmptyNode();
     n.setTail(this);
     return n;
   }
@@ -79,7 +77,7 @@ public abstract class FSList extends TOP
    * @param <T> generic type being selected
    * @return a new instance of SelectFSs
    */
-  public <T extends FeatureStructure> SelectFSs<T> select() {
+  public <U extends T> SelectFSs<U> select() {
     return new SelectFSs_impl<>(this);
   }
 
@@ -89,7 +87,7 @@ public abstract class FSList extends TOP
    * @param <T> generic type being selected
    * @return a new instance of SelectFSs
    */
-  public <T extends FeatureStructure> SelectFSs<T> select(Type filterByType) {
+  public <U extends T> SelectFSs<U> select(Type filterByType) {
     return new SelectFSs_impl<>(this).type(filterByType);
   }
 
@@ -99,7 +97,7 @@ public abstract class FSList extends TOP
    * @param <T> generic type being selected
    * @return a new instance of SelectFSs
    */
-  public <T extends FeatureStructure> SelectFSs<T> select(Class<T> filterByType) {
+  public <U extends T> SelectFSs<U> select(Class<U> filterByType) {
     return new SelectFSs_impl<>(this).type(filterByType);
   }
   
@@ -109,7 +107,7 @@ public abstract class FSList extends TOP
    * @param <T> generic type being selected
    * @return a new instance of SelectFSs
    */
-  public <T extends FeatureStructure> SelectFSs<T> select(int filterByType) {
+  public <U extends T> SelectFSs<U> select(int filterByType) {
     return new SelectFSs_impl<>(this).type(filterByType);
   }
   
@@ -119,7 +117,7 @@ public abstract class FSList extends TOP
    * @param <T> generic type being selected
    * @return a new instance of SelectFSs
    */
-  public <T extends FeatureStructure> SelectFSs<T> select(String filterByType) {
+  public <U extends T> SelectFSs<U> select(String filterByType) {
     return new SelectFSs_impl<>(this).type(filterByType);
   }
   
@@ -129,20 +127,20 @@ public abstract class FSList extends TOP
    * @param a the array of Feature Structures to populate the list with
    * @return an FSList, with the elements from the array
    */
-  public static FSList create(JCas jcas, FeatureStructure[] a) {
-    FSList fsl = jcas.getCasImpl().emptyFSList();   
+  public static <U extends TOP> FSList<U> create(JCas jcas, FeatureStructure[] a) {
+    FSList<TOP> fsl = jcas.getCasImpl().emptyFSList();   
     for (int i = a.length - 1; i >= 0; i--) {
       fsl = fsl.push((TOP) a[i]);
     }   
-    return fsl;
+    return (FSList<U>) fsl;
   }
 
   /* (non-Javadoc)
    * @see java.lang.Iterable#iterator()
    */
   @Override
-  public Iterator<TOP> iterator() {
-    return Collections.emptyIterator();  // overridden by NonEmptyFSList
+  public Iterator<T> iterator() {
+    return Collections.<T>emptyIterator();  // overridden by NonEmptyFSList
   }
     
   /**
@@ -150,15 +148,15 @@ public abstract class FSList extends TOP
    * @param item the item to push onto the list
    * @return the new list, with this item as the head value of the first element
    */
-  public NonEmptyFSList push(TOP item) {
-    return new NonEmptyFSList(_casView.getJCasImpl(), item, this);
+  public NonEmptyFSList<T> push(T item) {
+    return new NonEmptyFSList<T>(_casView.getJCasImpl(), item, this);
   }
 
   /**
    * @param <T> generic type being returned
    * @return a stream over this FSList
    */
-  public <T extends TOP> Stream<T> stream() {
+  public Stream<T> stream() {
     return (Stream<T>) StreamSupport.stream(spliterator(), false);
   }
   
@@ -166,4 +164,16 @@ public abstract class FSList extends TOP
   public EmptyFSList emptyList() {
     return this._casView.emptyFSList();
   }
+ 
+  public boolean contains(T v) {
+    FSList<T> node = this;
+    while (node instanceof NonEmptyFSList) {
+      NonEmptyFSList<T> n = (NonEmptyFSList<T>) node;
+      if (n.getHead() == v) {
+        return true;
+      }
+      node = n.getTail();
+    }
+    return false;
+  }
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java Tue Oct 17 13:11:47 2017
@@ -20,6 +20,8 @@
 package org.apache.uima.jcas.cas;
 
 import java.util.Arrays;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CommonArrayFS;
@@ -30,7 +32,10 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** Java Cas model for Cas FloatArray. */
-public final class FloatArray extends TOP implements CommonPrimitiveArray, FloatArrayFSImpl {
+public final class FloatArray extends TOP 
+                              implements CommonPrimitiveArray<Float>,
+                                         Iterable<Float>,
+                                         FloatArrayFSImpl {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_FLOAT_ARRAY;
@@ -211,4 +216,43 @@ public final class FloatArray extends TO
     floatArray.copyFromArray(a, 0, 0, a.length);
     return floatArray;
   }
+
+  /* (non-Javadoc)
+   * @see java.lang.Iterable#iterator()
+   */
+  @Override
+  public Iterator<Float> iterator() {
+    return new Iterator<Float>() {
+
+      int i = 0;
+      
+      @Override
+      public boolean hasNext() {
+        return i < size();
+      }
+
+      @Override
+      public Float next() {
+        if (!hasNext())
+          throw new NoSuchElementException();
+        return get(i++);
+      }
+      
+    };
+  }
+
+
+  /**
+   * @param item the item to see if is in the array
+   * @return true if the item is in the array
+   */
+  public boolean contains(float item) {
+    for (float b : theArray) {
+      if (b == item) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java Tue Oct 17 13:11:47 2017
@@ -21,8 +21,9 @@ package org.apache.uima.jcas.cas;
 
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
-import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
@@ -93,5 +94,20 @@ public abstract class FloatList extends
     }   
     return floatList;
   }
-
+  
+  public Stream<Float> stream() {
+    return StreamSupport.stream(spliterator(), false);
+  }
+  
+  public boolean contains(float v) {
+    FloatList node = this;
+    while (node instanceof NonEmptyFloatList) {
+      NonEmptyFloatList n = (NonEmptyFloatList) node;
+      if (n.getHead() == v) {
+        return true;
+      }
+      node = n.getTail();
+    }
+    return false;
+  }
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java Tue Oct 17 13:11:47 2017
@@ -35,7 +35,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** The Java Class model corresponding to the Cas IntegerArray_JCasImpl type. */
-public final class IntegerArray extends TOP implements CommonPrimitiveArray, IntArrayFSImpl, Iterable<Integer> {
+public final class IntegerArray extends TOP implements CommonPrimitiveArray<Integer>, IntArrayFSImpl, Iterable<Integer> {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_INTEGER_ARRAY;
@@ -267,4 +267,17 @@ public final class IntegerArray extends
   }
 
 
+  /**
+   * @param item the item to see if is in the array
+   * @return true if the item is in the array
+   */
+  public boolean contains(int item) {
+    for (int b : theArray) {
+      if (b == item) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArrayList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArrayList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArrayList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArrayList.java Tue Oct 17 13:11:47 2017
@@ -56,6 +56,7 @@ import org.apache.uima.jcas.JCasRegistry
  *   - it is adjustable, like ArrayList
  *   
  * Implementation notes:
+ *   - implements Iterable + stream, not Collection, because stream returns IntStream
  *   - Uses UimaSerializable APIs
  *   - two implementations of the array list:
  *     -- one uses the original IntegerArray, via a variant of the asList wrapper that returns ints
@@ -68,7 +69,7 @@ import org.apache.uima.jcas.JCasRegistry
 
 public class IntegerArrayList extends TOP implements 
                           Iterable<Integer>,
-                          UimaSerializable, CommonArrayFS, 
+                          UimaSerializable, CommonArrayFS<Integer>, 
                           RandomAccess, Cloneable {
  
   /** @generated
@@ -340,7 +341,7 @@ public class IntegerArrayList extends TO
    * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
    */
   @Override
-  public void copyValuesFrom(CommonArrayFS v) {
+  public void copyValuesFrom(CommonArrayFS<Integer> v) {
     clear();
     Spliterator.OfInt si;
     
@@ -371,14 +372,6 @@ public class IntegerArrayList extends TO
   public FeatureStructureImplC _superClone() {return clone();}  // enable common clone
   
   /**
-   * @return -
-   * @see java.util.ArrayList#isEmpty()
-   */
-  public boolean isEmpty() {
-    return size() == 0;
-  }
-
-  /**
    * @param i -
    * @return -
    */
@@ -569,8 +562,6 @@ public class IntegerArrayList extends TO
       action.accept(ii.nextInt());
     }
   }
-  
-  
     
 }
 

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java Tue Oct 17 13:11:47 2017
@@ -21,6 +21,10 @@ package org.apache.uima.jcas.cas;
 
 import java.util.NoSuchElementException;
 import java.util.PrimitiveIterator.OfInt;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.TypeImpl;
@@ -79,6 +83,7 @@ public abstract class IntegerList extend
   
   /* (non-Javadoc)
    * @see java.lang.Iterable#iterator()
+   * overridden by NonEmptyIntegerList
    */
   @Override
   public OfInt iterator() {
@@ -112,4 +117,25 @@ public abstract class IntegerList extend
     }   
     return integerList;
   }
+    
+  public Stream<Integer> stream() {
+    return StreamSupport.stream(spliterator(), false);
+  }
+  
+  @Override
+  public Spliterator.OfInt spliterator() {
+    return Spliterators.spliterator(iterator(), Long.MAX_VALUE, 0);
+  } 
+  
+  public boolean contains(int v) {
+    IntegerList node = this;
+    while (node instanceof NonEmptyIntegerList) {
+      NonEmptyIntegerList n = (NonEmptyIntegerList) node;
+      if (n.getHead() == v) {
+        return true;
+      }
+      node = n.getTail();
+    }
+    return false;
+  }
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java Tue Oct 17 13:11:47 2017
@@ -35,7 +35,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** JCas class model for LongArray */
-public final class LongArray extends TOP implements CommonPrimitiveArray, LongArrayFSImpl, Iterable<Long> {
+public final class LongArray extends TOP implements CommonPrimitiveArray<Long>, LongArrayFSImpl, Iterable<Long> {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_LONG_ARRAY;
@@ -254,4 +254,18 @@ public final class LongArray extends TOP
     }
   }
 
+
+  /**
+   * @param item the item to see if is in the array
+   * @return true if the item is in the array
+   */
+  public boolean contains(long item) {
+    for (long b : theArray) {
+      if (b == item) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java Tue Oct 17 13:11:47 2017
@@ -33,7 +33,7 @@ import org.apache.uima.cas.impl.TypeSyst
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class NonEmptyFSList extends FSList implements Iterable<TOP>, NonEmptyList {
+public class NonEmptyFSList<T extends TOP> extends FSList<T> implements NonEmptyList {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_NON_EMPTY_FS_LIST;
@@ -86,7 +86,7 @@ public class NonEmptyFSList extends FSLi
    * @param head -
    * @param tail -
    */
-  public NonEmptyFSList(JCas jcas, TOP head, CommonList tail) {
+  public NonEmptyFSList(JCas jcas, T head, CommonList tail) {
     this(jcas);
     setHead(head);
     setTail(tail);
@@ -97,30 +97,29 @@ public class NonEmptyFSList extends FSLi
    * @param jcas -
    * @param head -
    */
-  public NonEmptyFSList(JCas jcas, TOP head) {
+  public NonEmptyFSList(JCas jcas, T head) {
     this(jcas, head, jcas.getCasImpl().emptyFSList());
   }
   
   // *------------------*
   // * Feature: head
   /* getter for head * */
-  public TOP getHead() { return _getFeatureValueNc(wrapGetIntCatchException(_FH_head)); }
+  public T getHead() { return (T) _getFeatureValueNc(wrapGetIntCatchException(_FH_head)); }
 
   /* setter for head * */
-  public void setHead(FeatureStructure v) {
-    TOP vt = (TOP) v;
+  public void setHead(T vt) {
     if (vt != null && _casView.getBaseCAS() != vt._casView.getBaseCAS()) {
       /** Feature Structure {0} belongs to CAS {1}, may not be set as the value of an array or list element in a different CAS {2}.*/
       throw new CASRuntimeException(CASRuntimeException.FS_NOT_MEMBER_OF_CAS, vt, vt._casView, _casView);
     }
-    _setFeatureValueNcWj(wrapGetIntCatchException(_FH_head), v); }
+    _setFeatureValueNcWj(wrapGetIntCatchException(_FH_head), vt); }
 
 //  public void _setHeadNcNj(TOP v) { _F_head = v; }
   
   // *------------------*
   // * Feature: tail
   /* getter for tail * */
-  public FSList getTail() { return (FSList) _getFeatureValueNc(wrapGetIntCatchException(_FH_tail)); }
+  public FSList<T> getTail() { return (FSList<T>) _getFeatureValueNc(wrapGetIntCatchException(_FH_tail)); }
 
   /* setter for tail * */
   public void setTail(FSList v) {
@@ -135,8 +134,8 @@ public class NonEmptyFSList extends FSLi
     setTail((FSList) v);
   }
   
-  public TOP getNthElement(int i) {
-    return ((NonEmptyFSList)getNonEmptyNthNode(i)).getHead();
+  public T getNthElement(int i) {
+    return ((NonEmptyFSList<T>)getNonEmptyNthNode(i)).getHead();
   }
 
   /**
@@ -144,16 +143,16 @@ public class NonEmptyFSList extends FSLi
    * @param item to be inserted
    * @return the NonEmptyFSList node created  
    */
-  public NonEmptyFSList add(FeatureStructure item) {
-    FSList tail = getTail();
-    NonEmptyFSList node = tail.push((TOP) item);
+  public NonEmptyFSList<T> add(T item) {
+    FSList<T> tail = getTail();
+    NonEmptyFSList<T> node = tail.push(item);
     setTail(node);
     return node;
   }
 
   @Override
-  public Iterator<TOP> iterator() {
-    return new Iterator<TOP>() {
+  public Iterator<T> iterator() {
+    return new Iterator<T>() {
 
       FSList node = NonEmptyFSList.this;
       
@@ -163,12 +162,12 @@ public class NonEmptyFSList extends FSLi
       }
 
       @Override
-      public TOP next() {
+      public T next() {
         if (!hasNext()) {
           throw new NoSuchElementException();
         }
-        NonEmptyFSList nn = (NonEmptyFSList)node; 
-        TOP element = nn.getHead();
+        NonEmptyFSList<T> nn = (NonEmptyFSList<T>)node; 
+        T element = nn.getHead();
         node = nn.getTail();
         return element;
       }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java Tue Oct 17 13:11:47 2017
@@ -21,10 +21,8 @@ package org.apache.uima.jcas.cas;
 
 import java.lang.invoke.CallSite;
 import java.lang.invoke.MethodHandle;
-import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
-import java.util.PrimitiveIterator;
 import java.util.PrimitiveIterator.OfInt;
 
 import org.apache.uima.cas.CAS;

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java Tue Oct 17 13:11:47 2017
@@ -25,7 +25,6 @@ import java.util.NoSuchElementException;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CommonArrayFS;
-import org.apache.uima.cas.ShortArrayFS;
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.ShortArrayFSImpl;
 import org.apache.uima.cas.impl.TypeImpl;
@@ -33,7 +32,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** JCas class model for ShortArray */
-public final class ShortArray extends TOP implements CommonPrimitiveArray, ShortArrayFSImpl, Iterable<Short> {
+public final class ShortArray extends TOP implements CommonPrimitiveArray<Short>, ShortArrayFSImpl, Iterable<Short> {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_SHORT_ARRAY;
@@ -210,4 +209,18 @@ public final class ShortArray extends TO
     return shortArray;
   }
 
+
+  /**
+   * @param item the item to see if is in the array
+   * @return true if the item is in the array
+   */
+  public boolean contains(short item) {
+    for (short b : theArray) {
+      if (b == item) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java Tue Oct 17 13:11:47 2017
@@ -22,10 +22,10 @@ package org.apache.uima.jcas.cas;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
+import java.util.stream.Stream;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CommonArrayFS;
-import org.apache.uima.cas.StringArrayFS;
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.StringArrayFSImpl;
 import org.apache.uima.cas.impl.TypeImpl;
@@ -34,7 +34,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** JCas class model for StringArray */
-public final class StringArray extends TOP implements Iterable<String>, CommonPrimitiveArray, StringArrayFSImpl {
+public final class StringArray extends TOP implements Iterable<String>, CommonPrimitiveArray<String>, StringArrayFSImpl {
 
   /* public static string for use where constants are needed, e.g. in some Java Annotations */
   public final static String _TypeName = CAS.TYPE_NAME_STRING_ARRAY;
@@ -203,5 +203,8 @@ public final class StringArray extends T
     return Misc.contains(theArray, v);
   }
 
+  public Stream<String> stream() {
+    return Arrays.stream(theArray);
+  }
 
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java Tue Oct 17 13:11:47 2017
@@ -21,9 +21,12 @@ package org.apache.uima.jcas.cas;
 
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.internal.util.Misc;
 import org.apache.uima.jcas.JCas;
 
 public abstract class StringList extends TOP implements CommonList, Iterable<String> {
@@ -87,4 +90,23 @@ public abstract class StringList extends
     return stringList;
   }
   
+  /**
+   * @param <T> generic type being returned
+   * @return a stream over this FSList
+   */
+  public Stream<String> stream() {
+    return StreamSupport.stream(spliterator(), false);
+  }
+ 
+  public boolean contains(String v) {
+    StringList node = this;
+    while (node instanceof NonEmptyStringList) {
+      NonEmptyStringList n = (NonEmptyStringList) node;
+      if (Misc.equalStrings(v, n.getHead())) {
+        return true;
+      }
+      node = n.getTail();
+    }
+    return false;
+  }
 }

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java?rev=1812398&r1=1812397&r2=1812398&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java Tue Oct 17 13:11:47 2017
@@ -825,7 +825,7 @@ public class JCasTest extends TestCase {
 	}
 
   public void testFSListAPI() {
-    FSList sl = new EmptyFSList(jcas);
+    FSList<TOP> sl = new EmptyFSList(jcas);
     TOP fs1 = new TOP(jcas);
     TOP fs2 = new TOP(jcas);
     sl = sl.push(fs2);
@@ -833,6 +833,12 @@ public class JCasTest extends TestCase {
    
     TOP[] fss = new TOP[2];
     int i = 0;
+    Iterator<TOP> it = sl.iterator();
+    while (it.hasNext()) {
+      fss[i++] = it.next();
+    }
+    
+    i = 0;   
     for (TOP s : sl) {
       fss[i++] = s;
     }
@@ -842,13 +848,15 @@ public class JCasTest extends TestCase {
   }
 	  
   public void testFSArrayAPI() {
-    FSArray sa = new FSArray(jcas, 2);
+    FSArray<FeatureStructure> sa = new FSArray(jcas, 2);
     TOP fs1 = new TOP(jcas);
     TOP fs2 = new TOP(jcas);
     TOP[] values = {fs1, fs2}; 
     sa.copyFromArray(values, 0, 0, 2);
     
     int i = 0;
+    Iterator<FeatureStructure> it = sa.iterator();
+    
     for (FeatureStructure s : sa) {
       assert(s.equals(values[i++]));
     }