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);
}
}