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/31 21:05:05 UTC

svn commit: r1813934 - in /uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas: FSArray.java FSArrayList.java FSList.java NonEmptyFSList.java SelectViaCopyToArray.java

Author: schor
Date: Tue Oct 31 21:05:05 2017
New Revision: 1813934

URL: http://svn.apache.org/viewvc?rev=1813934&view=rev
Log:
[UIMA-5633] clean up generics

Modified:
    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/FSArrayList.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/NonEmptyFSList.java
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/SelectViaCopyToArray.java

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=1813934&r1=1813933&r2=1813934&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 31 21:05:05 2017
@@ -35,11 +35,14 @@ import org.apache.uima.cas.impl.TypeImpl
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-/** Java Class model for Cas FSArray type */
+/** Java Class model for Cas FSArray type
+ *  extends FeatureStructure for backwards compatibility 
+ *  when using FSArray with no typing. 
+ */
 public final class FSArray<T extends FeatureStructure> extends TOP 
                            implements ArrayFSImpl<T>,
                                       Iterable<T>,                                      
-                                      SelectViaCopyToArray {
+                                      SelectViaCopyToArray<T> {
 
   /* 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;
@@ -149,7 +152,7 @@ public final class FSArray<T extends Fea
    * @see org.apache.uima.cas.ArrayFS#copyFromArray(FeatureStructure[], int, int, int)
    */
   @Override
-  public <U extends T> void copyFromArray(U[] src, int srcPos, int destPos, int length) {
+  public <U extends FeatureStructure> void copyFromArray(U[] src, int srcPos, int destPos, int length) {
     int srcEnd = srcPos + length;
     int destEnd = destPos + length;
     if (srcPos < 0 ||
@@ -162,7 +165,7 @@ public final class FSArray<T extends Fea
     // doing this element by element to get pear conversions done if needed, and 
     // to get journaling done
     for (;srcPos < srcEnd && destPos < destEnd;) {
-      set(destPos++, src[srcPos++]);
+      set(destPos++, (T) src[srcPos++]);
     }
   }
 
@@ -256,7 +259,7 @@ public final class FSArray<T extends Fea
    * @param <U> the element type of the FSArray, subtype of FeatureStructure
    * @return -
    */
-  public static <U extends FeatureStructure> FSArray<U> create(JCas jcas, U[] a) {
+  public static <U extends FeatureStructure> FSArray<U> create(JCas jcas, FeatureStructure[] a) {
     FSArray<U> fsa = new FSArray<U>(jcas, a.length);
     fsa.copyFromArray(a, 0, 0, a.length);
     return fsa;

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArrayList.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArrayList.java?rev=1813934&r1=1813933&r2=1813934&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArrayList.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArrayList.java Tue Oct 31 21:05:05 2017
@@ -676,7 +676,7 @@ public class FSArrayList <T extends TOP>
    * @param length -
    * @see org.apache.uima.cas.ArrayFS#copyFromArray(FeatureStructure[], int, int, int)
    */
-  public void copyFromArray(T[] src, int srcPos, int destPos, int length) {
+  public <E extends FeatureStructure> void copyFromArray(E[] src, int srcPos, int destPos, int length) {
     int srcEnd = srcPos + length;
     int destEnd = destPos + length;
     if (srcPos < 0 ||
@@ -686,7 +686,7 @@ public class FSArrayList <T extends TOP>
           String.format("FSArrayList.copyFromArray, srcPos: %,d destPos: %,d length: %,d",  srcPos, destPos, length));
     }
     for (;srcPos < srcEnd && destPos < destEnd;) {
-      set(destPos++, src[srcPos++]);
+      set(destPos++, (T) src[srcPos++]);
     }
   }
 
@@ -798,13 +798,14 @@ public class FSArrayList <T extends TOP>
   /**
    * Convenience - create a FSArrayList from an existing FeatureStructure[].
    *
-   * @param <N> generic type of returned FS
+   * @param <E> generic type of returned FS
+   * @param <F> generic type of the elements of the array argument
    * @param jcas -
    * @param a -
    * @return -
    */
-  public static <N extends TOP> FSArrayList<N> create(JCas jcas, N[] a) {
-    FSArrayList<N> fsa = new FSArrayList<>(jcas, a.length);
+  public static <E extends TOP, F extends FeatureStructure> FSArrayList<E> create(JCas jcas, F[] a) {
+    FSArrayList<E> fsa = new FSArrayList<E>(jcas, a.length);
     fsa.copyFromArray(a, 0, 0, a.length);  // does pear and journaling actions as needed
     return 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=1813934&r1=1813933&r2=1813934&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 31 21:05:05 2017
@@ -20,7 +20,9 @@
 package org.apache.uima.jcas.cas;
 
 import java.util.Collections;
+import java.util.IdentityHashMap;
 import java.util.Iterator;
+import java.util.Set;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -31,8 +33,15 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.SelectFSs_impl;
 import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.internal.util.function.Consumer_withSaxException;
 import org.apache.uima.jcas.JCas;
+import org.xml.sax.SAXException;
 
+/**
+ * 
+ *  T extends TOP, v2 already mandated TOP for set/get
+ * @param <T> the type of the elements in the list
+ */
 public abstract class FSList<T extends TOP> extends TOP implements CommonList, Iterable<T> {
  
 	// Never called.
@@ -128,12 +137,12 @@ public abstract class FSList<T extends T
    * @param <U> the type of FeatureStructures being stored in the FSList being created
    * @return an FSList, with the elements from the array
    */
-  public static <U extends TOP> FSList<U> create(JCas jcas, FeatureStructure[] a) {
-    FSList<TOP> fsl = jcas.getCasImpl().emptyFSList();   
+  public static <U extends TOP, E extends FeatureStructure> FSList<U> create(JCas jcas, E[] a) {
+    FSList<U> fsl = jcas.getCasImpl().emptyFSList();   
     for (int i = a.length - 1; i >= 0; i--) {
-      fsl = fsl.push((TOP) a[i]);
+      fsl = fsl.push((U) a[i]);
     }   
-    return (FSList<U>) fsl;
+    return fsl;
   }
 
   /* (non-Javadoc)

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=1813934&r1=1813933&r2=1813934&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 31 21:05:05 2017
@@ -26,7 +26,6 @@ import java.util.NoSuchElementException;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CASRuntimeException;
-import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.impl.CASImpl;
 import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.cas.impl.TypeSystemImpl;
@@ -103,10 +102,12 @@ public class NonEmptyFSList<T extends TO
   
   // *------------------*
   // * Feature: head
+  // return type is TOP for backwards compatibility with v2
   /* getter for head * */
   public T getHead() { return (T) _getFeatureValueNc(wrapGetIntCatchException(_FH_head)); }
 
   /* setter for head * */
+  // arg type is TOP for backwards compatibility with v2
   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}.*/
@@ -154,7 +155,7 @@ public class NonEmptyFSList<T extends TO
   public Iterator<T> iterator() {
     return new Iterator<T>() {
 
-      FSList node = NonEmptyFSList.this;
+      FSList<T> node = NonEmptyFSList.this;
       
       @Override
       public boolean hasNext() {

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/SelectViaCopyToArray.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/SelectViaCopyToArray.java?rev=1813934&r1=1813933&r2=1813934&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/SelectViaCopyToArray.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/SelectViaCopyToArray.java Tue Oct 31 21:05:05 2017
@@ -29,11 +29,14 @@ import org.apache.uima.cas.impl.SelectFS
  * Classes which provide a toArrayForSelect() method that returns 
  * a FeatureStructure[] can implement this to enable the 
  * class to be used as a "select" source
+ * T extends FeatureStructure because FSArray with no typing needs to default to FeatureStructure
+ *   for backwards compatibility
+ * @param <T> the type of the element
  */
 
 
 
-public interface SelectViaCopyToArray {
+public interface  SelectViaCopyToArray<T extends FeatureStructure> {
   
   FeatureStructure[] _toArrayForSelect();
   CASImpl _getView(); 
@@ -42,47 +45,47 @@ public interface SelectViaCopyToArray {
    * @param <T> generic type being selected 
    * @return a new instance of SelectFSs
    */
-  default <T extends FeatureStructure> SelectFSs_impl<T> select() {
-    return new SelectFSs_impl<T>(_toArrayForSelect(), this._getView());
+  default SelectFSs_impl<T> select() {
+    return new SelectFSs_impl<>(_toArrayForSelect(), this._getView());
   }
 
   /**
    * Treat an FSArray as a source for SelectFSs. 
    * @param filterByType only includes elements of this type
-   * @param <T> generic type being selected
+   * @param <U> generic type being selected
    * @return a new instance of SelectFSs
    */
-  default <T extends FeatureStructure> SelectFSs<T> select(Type filterByType) {
+  default <U extends T> SelectFSs<U> select(Type filterByType) {
     return select().type(filterByType);
   }
 
   /**
    * Treat an FSArray as a source for SelectFSs.  
    * @param filterByType only includes elements of this JCas class
-   * @param <T> generic type being selected
+   * @param <U> generic type being selected
    * @return a new instance of SelectFSs
    */
-  default <T extends FeatureStructure> SelectFSs<T> select(Class<T> filterByType) {
+  default <U extends T> SelectFSs<U> select(Class<U> filterByType) {
     return select().type(filterByType);
   }
   
   /**
    * Treat an FSArray as a source for SelectFSs. 
    * @param filterByType only includes elements of this JCas class's type
-   * @param <T> generic type being selected
+   * @param <U> generic type being selected
    * @return a new instance of SelectFSs
    */
-  default <T extends FeatureStructure> SelectFSs<T> select(int filterByType) {
+  default <U extends T> SelectFSs<U> select(int filterByType) {
     return select().type(filterByType);
   }
   
   /**
    * Treat an FSArray as a source for SelectFSs. 
    * @param filterByType only includes elements of this type (fully qualifined type name)
-   * @param <T> generic type being selected
+   * @param <U> generic type being selected
    * @return a new instance of SelectFSs
    */
-  default <T extends FeatureStructure> SelectFSs<T> select(String filterByType) {
+  default <U extends T> SelectFSs<U> select(String filterByType) {
     return select().type(filterByType);
   }
 }