You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2022/08/15 19:29:13 UTC

[uima-uimaj] branch bugfix/234-Using-builtin-annotation-classes-before-creating-a-CAS-can-break-type-system-management created (now d7e10a4cf)

This is an automated email from the ASF dual-hosted git repository.

rec pushed a change to branch bugfix/234-Using-builtin-annotation-classes-before-creating-a-CAS-can-break-type-system-management
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git


      at d7e10a4cf Issue #234: Using builtin annotation classes before creating a CAS can break type system management

This branch includes the following new commits:

     new d7e10a4cf Issue #234: Using builtin annotation classes before creating a CAS can break type system management

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[uima-uimaj] 01/01: Issue #234: Using builtin annotation classes before creating a CAS can break type system management

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch bugfix/234-Using-builtin-annotation-classes-before-creating-a-CAS-can-break-type-system-management
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git

commit d7e10a4cfacf84b1d4f3a4440cea2d435cb08b2f
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Mon Aug 15 21:29:08 2022 +0200

    Issue #234: Using builtin annotation classes before creating a CAS can break type system management
    
    - Try fixing the case if a JCCI was created with a bad type ID because the type ID had not been set yet
---
 .../java/org/apache/uima/cas/impl/FSClassRegistry.java     | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java b/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java
index ee9824313..7db860c28 100644
--- a/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java
+++ b/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java
@@ -620,6 +620,20 @@ public abstract class FSClassRegistry { // abstract to prevent instantiating; th
       jcci = maybeCreateJCasClassInfo(ti, cl, type2jcci, lookup);
     }
 
+    // Due to initialization order, it could be that we created the JCCI before the static fields in
+    // the JCas class have been initialized. In particular, the jcasType typeIndexID might still
+    // have been uninitialized (0) when we crated the JCCI. To work fix that case, check if the
+    // typeIndexID has changed and if so update the JCCI
+    if (jcci != null && jcci.jcasType == 0) {
+      if (!Modifier.isAbstract(jcci.jcasClass.getModifiers())) { // skip next for abstract classes
+        int jcasType = Misc.getStaticIntFieldNoInherit(jcci.jcasClass, "typeIndexID");
+        if (jcasType != jcci.jcasType) {
+          jcci = new JCasClassInfo(jcci.jcasClass, jcci.generator, jcasType);
+          type2jcci.put(ti.getJCasClassName(), jcci);
+        }
+      }
+    }
+
     // do this setup for new type systems using previously loaded jcci, as well as
     // for new jccis
     if (jcci != null && jcci.jcasType >= 0) {