[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 {