Author: pkluegl Date: Sat Dec 29 20:57:43 2018 New Revision: 1849942 URL: http://svn.apache.org/viewvc?rev=1849942&view=rev Log: UIMA-5945 + UIMA-5946: eval inlined condition rules only for matched rule element, also for wildcards
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRuleElement.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRuleElement.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRuleElement.java?rev=1849942&r1=1849941&r2=1849942&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRuleElement.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRuleElement.java Sat Dec 29 20:57:43 2018 @@ -137,20 +137,21 @@ public abstract class AbstractRuleElemen } protected boolean matchInnerRules(RuleMatch ruleMatch, RutaStream stream, InferenceCrowd crowd) { - boolean inlinedRulesMatched = true; + List<ScriptApply> list = processInlinedConditionRules(ruleMatch, stream, crowd); - if (list != null) { - inlinedRulesMatched = false; - for (ScriptApply scriptApply : list) { - if (scriptApply instanceof RuleApply) { - RuleApply ra = (RuleApply) scriptApply; - if (ra.applied > 0) { - inlinedRulesMatched = true; - } + if (list == null) { + return true; + } + + for (ScriptApply scriptApply : list) { + if (scriptApply instanceof RuleApply) { + RuleApply ra = (RuleApply) scriptApply; + if (ra.applied > 0) { + return true; } } } - return inlinedRulesMatched; + return false; } protected List<RuleElementMatch> getMatch(RuleMatch ruleMatch, Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java?rev=1849942&r1=1849941&r2=1849942&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java Sat Dec 29 20:57:43 2018 @@ -567,8 +567,10 @@ public class ComposedRuleElement extends } match.setConditionInfo(evaluatedConditions); match.evaluateInnerMatches(true, stream); - boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); - match.setInlinedRulesMatched(inlinedRulesMatched); + if (match.matched()) { + boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); + match.setInlinedRulesMatched(inlinedRulesMatched); + } } @Override Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java?rev=1849942&r1=1849941&r2=1849942&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java Sat Dec 29 20:57:43 2018 @@ -85,8 +85,10 @@ public class RutaOptionalRuleElement ext } } result.setConditionInfo(base, evaluatedConditions); - boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); - result.setInlinedRulesMatched(inlinedRulesMatched); + if (result.matched()) { + boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); + result.setInlinedRulesMatched(inlinedRulesMatched); + } ruleMatch.setMatched(ruleMatch.matched() && result.matched()); } Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java?rev=1849942&r1=1849941&r2=1849942&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java Sat Dec 29 20:57:43 2018 @@ -401,8 +401,10 @@ public class RutaRuleElement extends Abs } } result.setConditionInfo(base, evaluatedConditions); - boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); - result.setInlinedRulesMatched(inlinedRulesMatched); + if (result.matched()) { + boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); + result.setInlinedRulesMatched(inlinedRulesMatched); + } ruleMatch.setMatched(ruleMatch.matched() && result.matched()); } Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java?rev=1849942&r1=1849941&r2=1849942&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java Sat Dec 29 20:57:43 2018 @@ -666,6 +666,10 @@ public class WildCardRuleElement extends } } result.setConditionInfo(base, evaluatedConditions); + if (result.matched()) { + boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd); + result.setInlinedRulesMatched(inlinedRulesMatched); + } ruleMatch.setMatched(ruleMatch.matched() && result.matched()); } 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=1849942&r1=1849941&r2=1849942&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 Sat Dec 29 20:57:43 2018 @@ -755,12 +755,14 @@ public class AnnotationLabelExpressionTe String script = "W.begin==0{-> T1};\n"; script += "T1 a:ANY{REGEXP(\"c\")}->{a{-> T2};};\n"; + script += "T1 a:ANY{REGEXP(\"c\")}<-{a{-> T3};};\n"; CAS cas = RutaTestUtils.getCAS(document); Ruta.apply(cas, script); RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "a"); RutaTestUtils.assertAnnotationsEquals(cas, 2, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 0); } Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java?rev=1849942&r1=1849941&r2=1849942&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java (original) +++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java Sat Dec 29 20:57:43 2018 @@ -195,4 +195,17 @@ public class WildCard2Test { RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "1", "1"); } + @Test + public void testInlinedRulesAtWildcard() throws Exception { + String document = "1 a a a 1"; + String script = "NUM #{->T1}<-{PERIOD;} NUM;\n"; + script += "NUM #{->T2}<-{SW;} NUM;\n"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "a a a"); + } + }