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 2018/12/21 13:12:52 UTC
svn commit: r1849472 - in /uima/ruta/trunk/ruta-core/src:
main/java/org/apache/uima/ruta/condition/
test/java/org/apache/uima/ruta/expression/annotation/
Author: pkluegl
Date: Fri Dec 21 13:12:52 2018
New Revision: 1849472
URL: http://svn.apache.org/viewvc?rev=1849472&view=rev
Log:
UIMA-5774: check on null
Removed:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/VariableCondition.java
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/FeatureCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ParseCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.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/condition/RegExpCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ScoreCondition.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java Fri Dec 21 13:12:52 2018
@@ -62,6 +62,9 @@ public class AfterCondition extends Type
}
private boolean check(AnnotationFS annotation, RutaStream stream, Type t) {
+ if (annotation == null) {
+ return false;
+ }
boolean result = false;
FSIterator<AnnotationFS> it = stream.getCas().getAnnotationIndex(t).iterator(annotation);
if (!it.isValid()) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java Fri Dec 21 13:12:52 2018
@@ -62,6 +62,9 @@ public class BeforeCondition extends Typ
}
private boolean check(AnnotationFS annotation, RutaStream stream, Type t) {
+ if (annotation == null) {
+ return false;
+ }
boolean result = false;
FSIterator<AnnotationFS> it = stream.getCas().getAnnotationIndex(t).iterator(annotation);
while (it.isValid()) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java Fri Dec 21 13:12:52 2018
@@ -128,7 +128,8 @@ public class ConditionFactory {
}
throw new RutaParseRuntimeException(
- "The condition CONTAINS does not support the following arguments in script " + parent.getName() + ": " + sb.toString());
+ "The condition CONTAINS does not support the following arguments in script "
+ + parent.getName() + ": " + sb.toString());
}
public AbstractRutaCondition createConditionContains(ITypeExpression typeExpr,
@@ -259,10 +260,6 @@ public class ConditionFactory {
return new ParseCondition(var, localeExpr);
}
- public AbstractRutaCondition createConditionVariable(Token id) {
- return new VariableCondition(id.getText());
- }
-
public AbstractRutaCondition createConditionIs(ITypeExpression type,
AbstractTypeListExpression list, RutaBlock env) {
if (type != null) {
@@ -352,8 +349,9 @@ public class ConditionFactory {
List<AbstractRutaCondition> conditions = macroConditionDefinition.getMiddle();
Set<String> vars = macroConditionDefinition.getRight();
if (definition.size() != argSize) {
- throw new RutaParseRuntimeException("Arguments of macro action '" + name
- + "' do not match its definition in script " + env.getName() + ": " + definition.values());
+ throw new RutaParseRuntimeException(
+ "Arguments of macro action '" + name + "' do not match its definition in script "
+ + env.getName() + ": " + definition.values());
}
return new MacroCondition(name, definition, conditions, vars, args);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java Fri Dec 21 13:12:52 2018
@@ -68,27 +68,30 @@ public class ContextCountCondition exten
}
List<AnnotationFS> overlappingContexts = new ArrayList<AnnotationFS>();
for (AnnotationFS eachContext : visibleContexts) {
- if (eachContext.getBegin() <= annotation.getBegin()
+ if (annotation != null && eachContext.getBegin() <= annotation.getBegin()
&& eachContext.getEnd() >= annotation.getEnd()) {
overlappingContexts.add(eachContext);
}
}
boolean result = false;
+
for (AnnotationFS eachContext : overlappingContexts) {
int index = 0;
int counter = 0;
- List<RutaBasic> basicsInWindow = stream.getBasicsInWindow(eachContext);
- for (RutaBasic eachBasic : basicsInWindow) {
- Collection<AnnotationFS> beginAnchors = eachBasic.getBeginAnchors(annotation.getType());
- if (beginAnchors != null) {
- for (AnnotationFS each : beginAnchors) {
- counter++;
- if (each.getBegin() == annotation.getBegin()
- && each.getEnd() == annotation.getEnd()
- && (each.getType().equals(annotation.getType()) || stream.getCas()
- .getTypeSystem().subsumes(annotation.getType(), each.getType()))) {
- index = counter;
+
+ if (annotation != null) {
+ List<RutaBasic> basicsInWindow = stream.getBasicsInWindow(eachContext);
+ for (RutaBasic eachBasic : basicsInWindow) {
+ Collection<AnnotationFS> beginAnchors = eachBasic.getBeginAnchors(annotation.getType());
+ if (beginAnchors != null) {
+ for (AnnotationFS each : beginAnchors) {
+ counter++;
+ if (each.getBegin() == annotation.getBegin() && each.getEnd() == annotation.getEnd()
+ && (each.getType().equals(annotation.getType()) || stream.getCas()
+ .getTypeSystem().subsumes(annotation.getType(), each.getType()))) {
+ index = counter;
+ }
}
}
}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java Fri Dec 21 13:12:52 2018
@@ -52,14 +52,16 @@ public class CurrentCountCondition exten
RuleElement element = context.getElement();
int count = 0;
- Iterator<AnnotationFS> it = stream.getCas().getAnnotationIndex(type.getType(context, stream))
- .iterator();
- while (it.hasNext()) {
- AnnotationFS next = it.next();
- if (next.getBegin() < annotation.getBegin()) {
- count++;
- } else {
- break;
+ if (annotation != null) {
+ Iterator<AnnotationFS> it = stream.getCas().getAnnotationIndex(type.getType(context, stream))
+ .iterator();
+ while (it.hasNext()) {
+ AnnotationFS next = it.next();
+ if (next.getBegin() < annotation.getBegin()) {
+ count++;
+ } else {
+ break;
+ }
}
}
if (var != null) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java Fri Dec 21 13:12:52 2018
@@ -62,8 +62,11 @@ public class EndsWithCondition extends T
}
}
- private boolean check(RutaStream stream, AnnotationFS matched, Type givenType) {
- RutaBasic endAnchor = stream.getEndAnchor(matched.getEnd());
+ private boolean check(RutaStream stream, AnnotationFS annotation, Type givenType) {
+ if (annotation == null) {
+ return false;
+ }
+ RutaBasic endAnchor = stream.getEndAnchor(annotation.getEnd());
if (endAnchor != null) {
return endAnchor.endsWith(givenType);
} else {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/FeatureCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/FeatureCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/FeatureCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/FeatureCondition.java Fri Dec 21 13:12:52 2018
@@ -44,7 +44,9 @@ public class FeatureCondition extends Ab
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
-
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
String typeWithFeature = annotation.getType().getName() + "."
+ featureStringExpression.getStringValue(context, stream);
MatchReference mf = new MatchReference(typeWithFeature);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java Fri Dec 21 13:12:52 2018
@@ -21,6 +21,7 @@ package org.apache.uima.ruta.condition;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
@@ -57,22 +58,24 @@ public class ImplicitCondition extends A
return new EvaluatedCondition(this, be.getBooleanValue(context, stream));
} else if (expr instanceof FeatureMatchExpression) {
FeatureMatchExpression fme = (FeatureMatchExpression) expr;
- List<AnnotationFS> annotations =new ArrayList<>();
+ List<AnnotationFS> annotations = new ArrayList<>();
MatchReference matchReference = fme.getMatchReference();
// TODO refactor
ITypeExpression typeExpr = matchReference.getTypeExpression(context, stream);
- IAnnotationListExpression annotationListExpr = matchReference.getAnnotationListExpression(context, stream);
- IAnnotationExpression annotationExpr = matchReference.getAnnotationExpression(context, stream);
+ IAnnotationListExpression annotationListExpr = matchReference
+ .getAnnotationListExpression(context, stream);
+ IAnnotationExpression annotationExpr = matchReference.getAnnotationExpression(context,
+ stream);
if (typeExpr != null) {
Type type = typeExpr.getType(context, stream);
annotations = getAnnotationsToCheck(annotation, type, fme, stream);
- } else if(annotationListExpr!=null) {
+ } else if (annotationListExpr != null) {
annotations.addAll(annotationListExpr.getAnnotationList(context, stream));
- } else if(annotationExpr!=null) {
+ } else if (annotationExpr != null) {
annotations.add(annotationExpr.getAnnotation(context, stream));
}
- Collection<? extends FeatureStructure> featureAnnotations = fme.getFeatureStructures(annotations, true,
- context, stream);
+ Collection<? extends FeatureStructure> featureAnnotations = fme
+ .getFeatureStructures(annotations, true, context, stream);
return new EvaluatedCondition(this, !featureAnnotations.isEmpty());
}
return new EvaluatedCondition(this, false);
@@ -80,6 +83,11 @@ public class ImplicitCondition extends A
private List<AnnotationFS> getAnnotationsToCheck(AnnotationFS annotation, Type type,
FeatureMatchExpression fme, RutaStream stream) {
+
+ if (annotation == null) {
+ return Collections.emptyList();
+ }
+
List<AnnotationFS> result = new ArrayList<AnnotationFS>();
TypeSystem typeSystem = stream.getCas().getTypeSystem();
if (typeSystem.subsumes(type, annotation.getType())) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java Fri Dec 21 13:12:52 2018
@@ -54,6 +54,11 @@ public class InListCondition extends Ter
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
String text = annotation.getCoveredText();
if (arg != null) {
text = arg.getStringValue(context, stream);
@@ -64,7 +69,7 @@ public class InListCondition extends Ter
if (stringList == null) {
RutaWordList wordList = listExpr.getList(context, stream);
boolean contains = false;
- if(wordList != null) {
+ if (wordList != null) {
contains = wordList.contains(text, false, 0, null, 0, true);
}
return new EvaluatedCondition(this, contains);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java Fri Dec 21 13:12:52 2018
@@ -45,10 +45,15 @@ public class IsCondition extends TypeSen
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
RutaBasic beginAnchor = stream.getBeginAnchor(annotation.getBegin());
if (!isWorkingOnList()) {
- Collection<AnnotationFS> beginAnchors = beginAnchor.getBeginAnchors(type.getType(context,
- stream));
+ Collection<AnnotationFS> beginAnchors = beginAnchor
+ .getBeginAnchors(type.getType(context, stream));
boolean result = false;
if (beginAnchors != null) {
for (AnnotationFS annotationFS : beginAnchors) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java Fri Dec 21 13:12:52 2018
@@ -37,6 +37,11 @@ public class LastCondition extends TypeS
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
RutaBasic endAnchor = stream.getEndAnchor(annotation.getEnd());
Type t = type.getType(context, stream);
boolean result = endAnchor.beginsWith(t) && endAnchor.endsWith(t);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java Fri Dec 21 13:12:52 2018
@@ -55,12 +55,17 @@ public class NearCondition extends TypeS
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
int maxValue = max.getIntegerValue(context, stream);
int minValue = min.getIntegerValue(context, stream);
boolean forwardValue = forward.getBooleanValue(context, stream);
- FSIterator<AnnotationFS> it = filtered.getBooleanValue(context, stream) ? stream : stream
- .getUnfilteredBasicIterator();
+ FSIterator<AnnotationFS> it = filtered.getBooleanValue(context, stream) ? stream
+ : stream.getUnfilteredBasicIterator();
AnnotationFS pointer = null;
if (forwardValue) {
pointer = stream.getEndAnchor(annotation.getEnd());
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ParseCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ParseCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ParseCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ParseCondition.java Fri Dec 21 13:12:52 2018
@@ -52,6 +52,11 @@ public class ParseCondition extends Abst
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
RuleElement element = context.getElement();
String text = annotation.getCoveredText();
RutaEnvironment env = element.getParent().getEnvironment();
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java Fri Dec 21 13:12:52 2018
@@ -63,6 +63,11 @@ public class PartOfNeqCondition extends
}
private boolean check(AnnotationFS annotation, RutaStream stream, Type t) {
+
+ if (annotation == null) {
+ return false;
+ }
+
RutaBasic beginAnchor = stream.getBeginAnchor(annotation.getBegin());
RutaBasic endAnchor = stream.getEndAnchor(annotation.getEnd());
boolean partOf = beginAnchor.isPartOf(t) || endAnchor.isPartOf(t);
@@ -84,12 +89,13 @@ public class PartOfNeqCondition extends
}
for (AnnotationFS afs : set) {
if (afs != null
- && (afs.getType().equals(t) || stream.getCas().getTypeSystem()
- .subsumes(t, afs.getType()))
+ && (afs.getType().equals(t)
+ || stream.getCas().getTypeSystem().subsumes(t, afs.getType()))
&& ((afs.getBegin() < annotation.getBegin() && afs.getEnd() > annotation.getEnd())
- || (afs.getBegin() == annotation.getBegin() && afs.getEnd() > annotation
- .getEnd()) || (afs.getBegin() < annotation.getBegin() && afs
- .getEnd() == annotation.getEnd()))) {
+ || (afs.getBegin() == annotation.getBegin()
+ && afs.getEnd() > annotation.getEnd())
+ || (afs.getBegin() < annotation.getBegin()
+ && afs.getEnd() == annotation.getEnd()))) {
return true;
}
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=1849472&r1=1849471&r2=1849472&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 Dec 21 13:12:52 2018
@@ -52,6 +52,11 @@ public class PositionCondition extends T
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
RuleElement element = context.getElement();
Type t = type.getType(context, stream);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/RegExpCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/RegExpCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/RegExpCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/RegExpCondition.java Fri Dec 21 13:12:52 2018
@@ -53,6 +53,11 @@ public class RegExpCondition extends Ter
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
Matcher matcher = null;
boolean ignore = ignoreCase == null ? false : ignoreCase.getBooleanValue(context, stream);
String stringValue = pattern.getStringValue(context, stream);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ScoreCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ScoreCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ScoreCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ScoreCondition.java Fri Dec 21 13:12:52 2018
@@ -46,6 +46,11 @@ public class ScoreCondition extends Term
@Override
public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
AnnotationFS annotation = context.getAnnotation();
+
+ if (annotation == null) {
+ return new EvaluatedCondition(this, false);
+ }
+
RuleElement element = context.getElement();
double score = 0;
RutaAnnotation rutaAnnotation = stream.getRutaAnnotationFor(annotation, false, stream);
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java Fri Dec 21 13:12:52 2018
@@ -65,6 +65,7 @@ public class StartsWithCondition extends
}
private boolean check(AnnotationFS annotation, Type t, RutaStream stream) {
+
if (annotation == null) {
return false;
}
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java?rev=1849472&r1=1849471&r2=1849472&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java Fri Dec 21 13:12:52 2018
@@ -217,14 +217,14 @@ public class AnnotationFeatureExpression
RutaTestUtils.assertAnnotationsEquals(cas, 10, 1, "Some");
}
-
+
@Test
public void testFeatureMatch() throws Exception {
String document = "This is a test.";
String script = "";
script += "Document{-> CREATE(Struct1, \"a\" = SW.begin == 8)};\n";
script += "Struct1.a{-> T1};\n";
-
+
Map<String, String> complexTypes = new TreeMap<String, String>();
complexTypes.put("Struct1", "uima.tcas.Annotation");
Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>();
@@ -232,11 +232,35 @@ public class AnnotationFeatureExpression
features.put("Struct1", list);
list.add(new TestFeature("a", "", "uima.tcas.Annotation"));
list.add(new TestFeature("as", "", "uima.cas.FSArray"));
-
+
CAS cas = RutaTestUtils.getCAS(document, complexTypes, features);
- Ruta.apply(cas, script);
-
+ Ruta.apply(cas, script);
+
RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "a");
}
+ @Test
+ public void testPartofOnNullMatch() throws Exception {
+ String document = "Some text.";
+ String script = "";
+ script += "W{-> CREATE(Struct)};\n";
+ script += "Struct.a{PARTOF(CW)-> T1};\n";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName1 = "Struct";
+ typeMap.put(typeName1, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName1, list);
+ String fn1 = "a";
+ list.add(new TestFeature(fn1, "", "uima.tcas.Annotation"));
+
+ CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
+
+ }
+
}