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";