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");
+
+  }
+
 }