You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2016/08/29 09:05:58 UTC

svn commit: r1758187 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/expression/feature/ main/java/org/apache/uima/ruta/expression/number/ test/java/org/apache/uima/ruta/expression/annotation/

Author: pkluegl
Date: Mon Aug 29 09:05:57 2016
New Revision: 1758187

URL: http://svn.apache.org/viewvc?rev=1758187&view=rev
Log:
UIMA-4851
- resolve lazy feature using target annotation
- added test

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java?rev=1758187&r1=1758186&r2=1758187&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java Mon Aug 29 09:05:57 2016
@@ -35,14 +35,18 @@ public class LazyFeature implements Feat
   
   public Feature initialize(Type type) {
    delegate = type.getFeatureByBaseName(featureName);
+   if(delegate == null) {
+     return this;
+   }
    return delegate;
   }
   
   public Feature initialize(AnnotationFS annotation) {
     if(annotation!= null) {
       delegate = annotation.getType().getFeatureByBaseName(featureName);
-    } else {
-      delegate = null;
+    } 
+    if(delegate == null) {
+      return this;
     }
     return delegate;
    }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java?rev=1758187&r1=1758186&r2=1758187&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java Mon Aug 29 09:05:57 2016
@@ -58,7 +58,12 @@ public class SimpleFeatureExpression ext
       Feature feature = features.get(features.size() - 1);
       if (feature instanceof LazyFeature) {
         LazyFeature lazyFeature = (LazyFeature) feature;
-        feature = lazyFeature.initialize(context.getAnnotation());
+        AnnotationFS annotation = context.getAnnotation();
+        List<AnnotationFS> targetAnnotation = getTargetAnnotation(annotation, this, context, stream);
+        if(targetAnnotation != null && !targetAnnotation.isEmpty()) {
+          annotation = targetAnnotation.get(0);
+        }
+        feature = lazyFeature.initialize(annotation);
       }
       return feature;
     } else {
@@ -123,22 +128,6 @@ public class SimpleFeatureExpression ext
           return annotation.getType();
         }
       }
-      // else {
-      // IAnnotationListExpression annotationListExpression =
-      // mr.getAnnotationListExpression(context, stream);
-      // if (annotationListExpression != null) {
-      // CAS cas = stream.getCas();
-      // TypeSystem typeSystem = cas.getTypeSystem();
-      // typeSystem.
-      // Type mostGeneralType = null;
-      // cas.g
-      // List<AnnotationFS> annotationList = annotationListExpression.getAnnotationList(context,
-      // stream);
-      // for (AnnotationFS annotationFS : annotationList) {
-      //
-      // }
-      // }
-      // }
     }
     return null;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java?rev=1758187&r1=1758186&r2=1758187&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java Mon Aug 29 09:05:57 2016
@@ -57,12 +57,12 @@ public class NumberFeatureExpression ext
   private Number getNumberValue(MatchContext context, RutaStream stream) {
     AnnotationFS annotation = context.getAnnotation();
     Number result = null;
-    Feature feature = fe.getFeature(context, stream);
-    Type range = feature.getRange();
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
     Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
             false);
     if (!featureAnnotations.isEmpty()) {
+      Feature feature = fe.getFeature(context, stream);
+      Type range = feature.getRange();
       AnnotationFS next = featureAnnotations.iterator().next();
       if (UIMAConstants.TYPE_BYTE.equals(range.getName())) {
         result = next.getByteValue(feature);

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java?rev=1758187&r1=1758186&r2=1758187&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java Mon Aug 29 09:05:57 2016
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertNot
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -316,6 +317,24 @@ public class AnnotationLabelExpressionTe
   }
 
   @Test
+  public void testSpecialFeatureWithoutContextMatch() throws Exception {
+    Map<String, String> types = new HashMap<>();
+    String type = "Valued";
+    types.put(type, "uima.tcas.Annotation");
+    Map<String, List<TestFeature>> features = new HashMap<>();
+    List<TestFeature> list = new ArrayList<>();
+    list.add(new TestFeature("value", "", "uima.cas.Integer"));
+    features.put(type, list);
+    CAS cas = RutaTestUtils.getCAS("Some text.", types, features);
+    
+    String script = "a:W{-> Valued, Valued.value = a.end};\n";
+    script += "(a:Valued b:Valued){a.value == (b.value-5) -> T1};";
+    
+    Ruta.apply(cas, script);
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some text");
+  }
+  
+  @Test
   public void testAcrossInlinedRules() throws Exception {
     String script = "(# PERIOD){->T1};\n";
     script += "T1{-> Struct1, Struct1.a = i}<-{i:SW;};\n";