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/07/29 22:35:38 UTC

[uima-uimaj] branch bugfix/240-Helper-annotation-created-by-SelectFS-should-not-survive created (now b7225a49c)

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

rec pushed a change to branch bugfix/240-Helper-annotation-created-by-SelectFS-should-not-survive
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git


      at b7225a49c Issue #240: Helper annotation created by SelectFS should not survive

This branch includes the following new commits:

     new b7225a49c Issue #240: Helper annotation created by SelectFS should not survive

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 #240: Helper annotation created by SelectFS should not survive

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

rec pushed a commit to branch bugfix/240-Helper-annotation-created-by-SelectFS-should-not-survive
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git

commit b7225a49cccb995f90d8f76fbfc1a9b51cacdfa4
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Sat Jul 30 00:35:32 2022 +0200

    Issue #240: Helper annotation created by SelectFS should not survive
    
    - Prevent helper annotation from getting an ID and being held onto even when holding onto FSes is enabled
    - Added unit test
---
 .../java/org/apache/uima/cas/impl/CASImpl.java     | 13 +++++++++--
 .../org/apache/uima/cas/impl/SelectFSs_impl.java   |  5 +++-
 .../apache/uima/cas/impl/SelectFsNoJCasTest.java   | 27 ++++++++++++++++++----
 3 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java b/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
index b8c6236b5..e3f57f52e 100644
--- a/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
+++ b/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
@@ -5240,8 +5240,10 @@ public class CASImpl extends AbstractCas_ImplBase
     List<TOP> all = new AllFSs(this, mark, includeFilter, typeMapper)
             .getAllFSsAllViews_sofas_reachable().getAllFSsSorted();
     List<TOP> filtered = filterAboveMark(all, mark);
-    for (TOP fs : filtered) {
-      action_filtered.accept(fs);
+    if (action_filtered != null) {
+      for (TOP fs : filtered) {
+        action_filtered.accept(fs);
+      }
     }
     return all;
   }
@@ -6169,6 +6171,13 @@ public class CASImpl extends AbstractCas_ImplBase
     return r;
   }
 
+  AutoCloseableNoException ll_forceEnableV2IdRefs(boolean enable) {
+    final boolean restoreState = svd.isId2Fs;
+    AutoCloseableNoException r = () -> svd.isId2Fs = restoreState;
+    svd.isId2Fs = enable;
+    return r;
+  }
+
   // int allocIntData(int sz) {
   //
   // if (sz > INT_DATA_FOR_ALLOC_SIZE / 4) {
diff --git a/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java b/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
index 0322c2da1..c0d6abaa8 100644
--- a/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
+++ b/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
@@ -63,6 +63,7 @@ import org.apache.uima.jcas.cas.NonEmptyFSList;
 import org.apache.uima.jcas.cas.TOP;
 import org.apache.uima.jcas.impl.JCasImpl;
 import org.apache.uima.jcas.tcas.Annotation;
+import org.apache.uima.util.AutoCloseableNoException;
 
 // @formatter:off
 /**
@@ -1020,7 +1021,9 @@ public class SelectFSs_impl<T extends FeatureStructure> implements SelectFSs<T>
     if (end < begin) {
       throw new IllegalArgumentException("End value must be >= Begin value");
     }
-    return new Annotation(jcas, begin, end);
+    try (AutoCloseableNoException c = ((CASImpl) jcas.getCas()).ll_forceEnableV2IdRefs(false)) {
+      return new Annotation(jcas, begin, end);
+    }
   }
 
 //@formatter:off
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsNoJCasTest.java b/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsNoJCasTest.java
index 79bc7d8ae..cac79b523 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsNoJCasTest.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsNoJCasTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.cas.impl;
 
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 
@@ -30,9 +30,11 @@ import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.resource.metadata.impl.TypePriorities_impl;
 import org.apache.uima.test.junit_extension.JUnitExtension;
+import org.apache.uima.util.AutoCloseableNoException;
 import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.XMLInputSource;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 // tests without initializing JCas
@@ -53,16 +55,33 @@ public class SelectFsNoJCasTest {
             null);
   }
 
+  @BeforeEach
+  public void setup() {
+    cas.reset();
+  }
+
   @Test
   public void testOpsNeedingAnnotation() {
     Type type = cas.getTypeSystem().getType("x.y.z.SentenceNoJCas");
     FeatureStructure s = cas.createAnnotation(type, 0, 4);
     cas.indexRepository.addFS(s);
 
-    boolean b = cas.<Annotation> select(type).covering(1, 2).map(f -> f.getBegin()).findFirst()
+    assertThat(cas.<Annotation> select(type).covering(1, 2).map(f -> f.getBegin()).findFirst()) //
             .isPresent();
-
-    assertTrue(b);
   }
 
+  @Test
+  public void thatHelperAnnotationsDoNotRemainInCas() {
+    try (AutoCloseableNoException a = cas.ll_enableV2IdRefs(true)) {
+      cas.setDocumentText("text");
+      assertThat(cas.walkReachablePlusFSsSorted(null, null, null, null))
+              .containsExactly(cas.getSofa(), cas.getDocumentAnnotation());
+
+      cas.select(Annotation.class).at(0, 1);
+
+      assertThat(cas.walkReachablePlusFSsSorted(null, null, null, null))
+              .as("The helper annotation created by select must not be discovarably")
+              .containsExactly(cas.getSofa(), cas.getDocumentAnnotation());
+    }
+  }
 }