[UIMA-6344] Ruta: ConjunctRules fires without justification
- fix matched info for failed lookahead
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java b/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
index b5634a9..e25038b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
@@ -420,6 +420,10 @@
RuleElementContainer container = getContainer();
doMatch(after, annotation, ruleMatch, containerMatch, isStartAnchor(), stream, crowd);
if (equals(entryPoint) && ruleApply == null) {
+ if (failed) {
+ // inform caller about the failed state using the matched info
+ ruleMatch.setMatched(false);
+ }
result.add(ruleMatch);
} else if (container == null) {
result = fallback(after, failed, annotation, ruleMatch, ruleApply, containerMatch,
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java
index 2da50fa..1d4561f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java
@@ -116,4 +116,33 @@
RutaTestUtils.assertAnnotationsEquals(cas, 2, 8, "A", "A", "B", "B", "B", "B", "A", "A");
}
+ @Test
+ public void testFirstElementMatches() throws Exception {
+
+ String document = "a Bb a Bb";
+ CAS cas = RutaTestUtils.getCAS(document);
+
+ Ruta.apply(cas, "SW{-> T1} % CW{-> T3} CW{-> T4};");
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 3, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 4, 0);
+
+ Ruta.apply(cas, "CW{-> T1} CW{-> T2} % SW{-> T3};");
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 3, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 4, 0);
+
+ Ruta.apply(cas, "SW{-> T1} SW{-> T2} % CW{-> T3} CW{-> T4};");
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 3, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 4, 0);
+
+ }
+
}