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 2019/06/14 07:25:40 UTC
svn commit: r1861314 - in /uima/ruta/trunk/ruta-core/src:
main/java/org/apache/uima/ruta/action/ main/java/org/apache/uima/ruta/block/
main/java/org/apache/uima/ruta/condition/
main/java/org/apache/uima/ruta/rule/
main/java/org/apache/uima/ruta/verbali...
Author: pkluegl
Date: Fri Jun 14 07:25:40 2019
New Revision: 1861314
URL: http://svn.apache.org/viewvc?rev=1861314&view=rev
Log:
UIMA-6065: fix NPE for optional in FOREACH
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GetFeatureAction.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/ForEachBlock.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/RutaScriptBlock.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GetFeatureAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GetFeatureAction.java?rev=1861314&r1=1861313&r2=1861314&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GetFeatureAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GetFeatureAction.java Fri Jun 14 07:25:40 2019
@@ -33,6 +33,7 @@ import org.apache.uima.ruta.expression.s
import org.apache.uima.ruta.rule.MatchContext;
import org.apache.uima.ruta.rule.RuleElement;
import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.RutaMatcher;
import org.apache.uima.ruta.rule.RutaRuleElement;
import org.apache.uima.ruta.visitor.InferenceCrowd;
@@ -57,7 +58,10 @@ public class GetFeatureAction extends Ab
Type type = null;
if (element instanceof RutaRuleElement) {
- type = ((RutaRuleElement) element).getMatcher().getType(parent, stream);
+ RutaMatcher matcher = ((RutaRuleElement) element).getMatcher();
+ if (matcher != null) {
+ type = matcher.getType(parent, stream);
+ }
}
if (type == null) {
return;
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/ForEachBlock.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/ForEachBlock.java?rev=1861314&r1=1861313&r2=1861314&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/ForEachBlock.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/ForEachBlock.java Fri Jun 14 07:25:40 2019
@@ -122,6 +122,9 @@ public class ForEachBlock extends RutaBl
private boolean setRuleElementAnchorRecursively(RuleElement ruleElement) {
if (ruleElement instanceof RutaRuleElement) {
RutaMatcher matcher = ((RutaRuleElement) ruleElement).getMatcher();
+ if (matcher == null) {
+ return false;
+ }
IRutaExpression expression = matcher.getExpression();
if (expression instanceof AnnotationTypeExpression) {
MatchReference reference = ((AnnotationTypeExpression) expression).getReference();
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/RutaScriptBlock.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/RutaScriptBlock.java?rev=1861314&r1=1861313&r2=1861314&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/RutaScriptBlock.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/block/RutaScriptBlock.java Fri Jun 14 07:25:40 2019
@@ -30,6 +30,7 @@ import org.apache.uima.ruta.rule.Abstrac
import org.apache.uima.ruta.rule.AbstractRuleMatch;
import org.apache.uima.ruta.rule.RuleApply;
import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.RutaMatcher;
import org.apache.uima.ruta.rule.RutaRule;
import org.apache.uima.ruta.rule.RutaRuleElement;
import org.apache.uima.ruta.visitor.InferenceCrowd;
@@ -59,8 +60,12 @@ public class RutaScriptBlock extends Rut
continue;
}
// TODO refactor!!
- Type type = ((RutaRuleElement) rule.getRuleElements().get(0)).getMatcher()
- .getType(getParent() == null ? this : getParent(), stream);
+ RutaMatcher matcher = ((RutaRuleElement) rule.getRuleElements().get(0)).getMatcher();
+ if (matcher == null) {
+ continue;
+ }
+
+ Type type = matcher.getType(getParent() == null ? this : getParent(), stream);
RutaStream window = stream.getWindowStream(each, type);
for (RutaStatement element : getElements()) {
if (element != null) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java?rev=1861314&r1=1861313&r2=1861314&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java Fri Jun 14 07:25:40 2019
@@ -32,6 +32,7 @@ import org.apache.uima.ruta.expression.t
import org.apache.uima.ruta.rule.EvaluatedCondition;
import org.apache.uima.ruta.rule.MatchContext;
import org.apache.uima.ruta.rule.RuleElement;
+import org.apache.uima.ruta.rule.RutaMatcher;
import org.apache.uima.ruta.rule.RutaRuleElement;
import org.apache.uima.ruta.type.RutaBasic;
import org.apache.uima.ruta.visitor.InferenceCrowd;
@@ -91,7 +92,10 @@ public class PositionCondition extends T
List<Type> targetTypes = new ArrayList<Type>();
if (element instanceof RutaRuleElement) {
RutaRuleElement re = (RutaRuleElement) element;
- targetTypes.add(re.getMatcher().getType(element.getParent(), stream));
+ RutaMatcher matcher = re.getMatcher();
+ if (matcher != null) {
+ targetTypes.add(matcher.getType(element.getParent(), stream));
+ }
} else {
targetTypes.add(annotation.getType());
}
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=1861314&r1=1861313&r2=1861314&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 Fri Jun 14 07:25:40 2019
@@ -473,7 +473,7 @@ public class WildCardRuleElement extends
Type type = matcher.getType(parent, stream);
iterator = getIteratorOfType(after, type, annotation, stream);
}
- } else {
+ } else if (matcher != null) {
// fallback
Type type = matcher.getType(parent, stream);
iterator = getIteratorOfType(after, type, annotation, stream);
@@ -580,6 +580,9 @@ public class WildCardRuleElement extends
RutaStream stream, InferenceCrowd crowd) {
List<RuleMatch> result = new ArrayList<RuleMatch>();
RutaLiteralMatcher matcher = (RutaLiteralMatcher) nextElement.getMatcher();
+ if (matcher == null) {
+ return result;
+ }
IStringExpression expression = matcher.getExpression();
MatchContext context = new MatchContext(this, ruleMatch, true);
String stringValue = expression.getStringValue(context, stream);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java?rev=1861314&r1=1861313&r2=1861314&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java Fri Jun 14 07:25:40 2019
@@ -156,14 +156,19 @@ public class ScriptVerbalizer {
RutaRuleElement tmre = (RutaRuleElement) re;
RutaMatcher matcher = tmre.getMatcher();
// action-only rule
- IRutaExpression expression = matcher.getExpression();
- boolean actionOnlyRule = expression == null;
- if (expression != null) {
- String verbalize = verbalizer.verbalize(expression);
- if (StringUtils.isBlank(verbalize)) {
- actionOnlyRule = true;
- } else {
- result.append(verbalize);
+ boolean actionOnlyRule = false;
+ if (matcher == null) {
+ result.append("_");
+ } else {
+ IRutaExpression expression = matcher.getExpression();
+ actionOnlyRule = expression == null;
+ if (expression != null) {
+ String verbalize = verbalizer.verbalize(expression);
+ if (StringUtils.isBlank(verbalize)) {
+ actionOnlyRule = true;
+ } else {
+ result.append(verbalize);
+ }
}
}
if (actionOnlyRule) {
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java?rev=1861314&r1=1861313&r2=1861314&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java Fri Jun 14 07:25:40 2019
@@ -35,17 +35,12 @@ public class ForEachBlockTest {
private String text = "Some text 4 more text.";
@Test
- public void testDefault() {
+ public void testDefault() throws Exception {
String script = getForEachScript();
- CAS cas = null;
- try {
- cas = RutaTestUtils.getCAS(text);
- Ruta.apply(cas, script);
- } catch (Exception e) {
- e.printStackTrace();
- }
+ CAS cas = RutaTestUtils.getCAS(text);
+ Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "4");
RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "4");
@@ -58,7 +53,6 @@ public class ForEachBlockTest {
RutaTestUtils.assertAnnotationsEquals(cas, 9, 1, "Some");
RutaTestUtils.assertAnnotationsEquals(cas, 10, 1, "4");
- cas.release();
}
@Test
@@ -90,8 +84,6 @@ public class ForEachBlockTest {
long endForEach = System.currentTimeMillis();
System.out.println("FOREACH: " + (endForEach - startForEach) + "ms");
- cas.release();
-
}
private String getForEachScript() {
@@ -128,7 +120,6 @@ public class ForEachBlockTest {
Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "2^3", "2");
- cas.release();
}
@Test
@@ -144,7 +135,6 @@ public class ForEachBlockTest {
Ruta.apply(cas, script, parameters);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "4", "2^3");
- cas.release();
}
@Test
@@ -161,7 +151,6 @@ public class ForEachBlockTest {
RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "text 4x2^3", "text 4x2", "text 4");
RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "text 4x2^3");
- cas.release();
}
@Test
@@ -175,7 +164,6 @@ public class ForEachBlockTest {
Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "4x2^3");
- cas.release();
}
@Test
@@ -189,7 +177,6 @@ public class ForEachBlockTest {
Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "1");
- cas.release();
}
@Test
@@ -207,7 +194,19 @@ public class ForEachBlockTest {
RutaTestUtils.assertAnnotationsEquals(cas, 1, 0);
RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "1", "22", "333");
- cas.release();
+ }
+
+ @Test
+ public void testWithOptional() throws Exception {
+ String script = "";
+ script += "FOREACH(num) NUM{} {\n";
+ script += "_{-PARTOF(W)} num{-> T1};\n";
+ script += "}\n";
+
+ CAS cas = RutaTestUtils.getCAS("1 22 333");
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "1", "22", "333");
}
}