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 2015/11/02 21:33:58 UTC

svn commit: r1712144 - /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java

Author: schor
Date: Mon Nov  2 20:33:58 2015
New Revision: 1712144

URL: http://svn.apache.org/viewvc?rev=1712144&view=rev
Log:
[UIMA-4679] add better error checking for missing setters/getters

Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java?rev=1712144&r1=1712143&r2=1712144&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java Mon Nov  2 20:33:58 2015
@@ -52,6 +52,7 @@ import org.apache.uima.cas.function.JCas
 import org.apache.uima.cas.function.JCas_setter_int;
 import org.apache.uima.cas.function.JCas_setter_long;
 import org.apache.uima.cas.function.JCas_setter_short;
+import org.apache.uima.jcas.cas.AnnotationBase;
 import org.apache.uima.jcas.cas.Sofa;
 import org.apache.uima.jcas.cas.TOP;
 import org.apache.uima.util.Misc;
@@ -124,7 +125,10 @@ public class FSClassRegistry {
   
   private static final MethodType fsGeneratorType      = methodType(FeatureStructureImplC.class, TypeImpl.class, CASImpl.class);
   private static final MethodType fsGeneratorArrayType = methodType(FeatureStructureImplC.class, TypeImpl.class, CASImpl.class, int.class);
-  
+
+  // must preceed first (static) use
+  static private ThreadLocal<ArrayList<Exception>> errorSet = new ThreadLocal<ArrayList<Exception>>();
+
   public static class GetterSetter {
     final Object getter;
     final Object setter;
@@ -171,8 +175,6 @@ public class FSClassRegistry {
     
     reportErrors();
   }
-
-  static private ThreadLocal<ArrayList<Exception>> errorSet = new ThreadLocal<ArrayList<Exception>>();
   
   // the loaded JCas cover classes, generators, setters, and getters.  index is typecode; value is JCas cover class which may belong to a supertype.
   private final JCasClassInfo[] jcasClassesInfo; 
@@ -367,7 +369,10 @@ public class FSClassRegistry {
                         : (JCas_setter_generic<?>) callSite.getTarget().invokeExact();
       }
     } catch (NoSuchMethodException e) {
-      if (jcasClass == Sofa.class && !isGetter) {return null;}  // this one case is ok, setters blocked for sofa
+      if ((jcasClass == Sofa.class && !isGetter) ||
+          (jcasClass == AnnotationBase.class && !isGetter)) {
+        return null;
+      }  
       // report missing setter or getter
       CASException casEx = new CASException(CASException.JCAS_FEATURENOTFOUND_ERROR, 
           jcasClass.getName(),