[UIMA-6247] Ruta: not able to check label expression on null as implicit condition
- extend boolean annotation expression grammar
diff --git a/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g b/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
index ba761ab..4e5f7fb 100644
--- a/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
+++ b/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
@@ -2883,8 +2883,12 @@
:
e1 = annotationExpression
op = (EQUAL | NOTEQUAL)
- e2 = annotationExpression
+ (e2 = annotationExpression
{expr = expressionFactory.createBooleanAnnotationExpression(e1,op,e2);}
+ |
+ e3 = nullExpression
+ {expr = expressionFactory.createBooleanAnnotationExpression(e1,op,e3);}
+ )
;
booleanAnnotationListExpression returns [IBooleanExpression expr = null]
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
index 1e5984e..e220a7c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
@@ -817,6 +817,22 @@
}
@Test
+ public void testImplicitNullCheck() throws Exception {
+
+ String document = "CW sw 1";
+
+ String script = "";
+ script += "(w:W n:NUM?){n!=null -> T1};";
+ script += "(w:W n:NUM?){n==null -> T2};";
+
+ CAS cas = RutaTestUtils.getCAS(document);
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "sw 1");
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "CW");
+ }
+
+ @Test
@Ignore
public void testInlineWithQuantifier() throws Exception {