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 2016/01/04 11:33:50 UTC

svn commit: r1722834 [6/9] - in /uima/ruta/trunk: ./ example-projects/ruta-ep-example-extensions/ example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ ruta-core-ext/src/main/java/org/apache/uima/ruta/block/...

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java Mon Jan  4 10:33:48 2016
@@ -25,56 +25,47 @@ import java.util.List;
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.MatchContext;
 
-public class NullExpression extends FeatureExpression implements IStringExpression, ITypeExpression{
+public class NullExpression extends FeatureExpression implements IStringExpression, ITypeExpression {
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public String getStringValue(MatchContext context, RutaStream stream) {
     return null;
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    return null;
-  }
-
-  @Override
-  public Feature getFeature(RutaBlock parent) {
+  public Collection<AnnotationFS> getFeatureAnnotations(Collection<AnnotationFS> annotations,
+          RutaStream stream, MatchContext context, boolean checkOnFeatureValue) {
     return null;
   }
 
   @Override
-  public List<Feature> getFeatures(RutaBlock parent) {
+  public Type getType(MatchContext context, RutaStream stream) {
     return null;
   }
 
   @Override
-  public List<String> getFeatureStringList(RutaBlock parent) {
+  public Feature getFeature(MatchContext context, RutaStream stream) {
     return null;
   }
 
   @Override
-  public TypeExpression getTypeExpr(RutaBlock parent) {
+  public List<Feature> getFeatures(MatchContext context, RutaStream stream) {
     return null;
   }
 
   @Override
-  public Collection<AnnotationFS> getFeatureAnnotations(Collection<AnnotationFS> annotations,
-          RutaStream stream, RutaBlock parent, boolean checkOnFeatureValue) {
+  public List<String> getFeatureStringList(MatchContext context, RutaStream stream) {
     return null;
   }
 
   @Override
-  public Type getType(RutaBlock parent) {
+  public ITypeExpression getTypeExpr(MatchContext context, RutaStream stream) {
     return null;
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java Mon Jan  4 10:33:48 2016
@@ -37,23 +37,23 @@ public class RutaExpression extends Ruta
     if (annotation == null) {
       return Collections.emptyList();
     }
-    
+
     // "autocast" to document annotation when mentioning document.
     // This is either the actual document annotation or the current one in a block or inlined rule
     AnnotationFS documentAnnotation = stream.getCas().getDocumentAnnotation();
     Type docType = documentAnnotation.getType();
-    if(docType.equals(type)) {
-        List<AnnotationFS> result = new ArrayList<AnnotationFS>(1);
-        AnnotationFS windowAnnotation = stream.getFilter().getWindowAnnotation();
-        if(windowAnnotation == null) {
-          result.add(documentAnnotation);
-          return result;
-        } else {
-          result.add(windowAnnotation);
-          return result;
-        }
+    if (docType.equals(type)) {
+      List<AnnotationFS> result = new ArrayList<AnnotationFS>(1);
+      AnnotationFS windowAnnotation = stream.getFilter().getWindowAnnotation();
+      if (windowAnnotation == null) {
+        result.add(documentAnnotation);
+        return result;
+      } else {
+        result.add(windowAnnotation);
+        return result;
+      }
     }
-    
+
     if (annotation.getType().equals(type)
             || stream.getCas().getTypeSystem().subsumes(type, annotation.getType())) {
       List<AnnotationFS> result = new ArrayList<AnnotationFS>(1);
@@ -62,7 +62,8 @@ public class RutaExpression extends Ruta
     } else {
       Collection<AnnotationFS> beginAnchors = stream.getBeginAnchor(annotation.getBegin())
               .getBeginAnchors(type);
-      Collection<AnnotationFS> endAnchors = stream.getEndAnchor(annotation.getEnd()).getEndAnchors(type);
+      Collection<AnnotationFS> endAnchors = stream.getEndAnchor(annotation.getEnd()).getEndAnchors(
+              type);
       @SuppressWarnings("unchecked")
       Collection<AnnotationFS> intersection = CollectionUtils
               .intersection(beginAnchors, endAnchors);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationExpression.java Mon Jan  4 10:33:48 2016
@@ -19,39 +19,21 @@
 
 package org.apache.uima.ruta.expression.annotation;
 
-import java.util.List;
-
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.expression.RutaExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
-public abstract class AbstractAnnotationExpression implements IAnnotationExpression {
-  
-  public AnnotationFS getAnnotation(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
-    }
-    return getAnnotation(parent, annotation, stream);
-  }
+public abstract class AbstractAnnotationExpression extends RutaExpression implements IAnnotationExpression {
 
-  public abstract AnnotationFS getAnnotation(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
-  
-  public List<AnnotationFS> getAnnotations(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
+  @Override
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    AnnotationFS annotation = getAnnotation(context, stream);
+    if(annotation != null) {
+      return annotation.getCoveredText();
+    } else {
+      return "null";
     }
-    return getAnnotations(parent, annotation, stream);
   }
-
-  public abstract List<AnnotationFS> getAnnotations(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
+  
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationExpression.java Mon Jan  4 10:33:48 2016
@@ -19,29 +19,18 @@
 
 package org.apache.uima.ruta.expression.annotation;
 
-import java.util.List;
-
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 /**
  * This is a generic interface for all annotation expressions, expressions that refer to explicit
  * annotations.
  *
  */
-public interface IAnnotationExpression {
-
-  AnnotationFS getAnnotation(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
-
-  List<AnnotationFS> getAnnotations(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
-
-  AnnotationFS getAnnotation(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream);
+public interface IAnnotationExpression extends IStringExpression {
 
-  List<AnnotationFS> getAnnotations(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream);
+  AnnotationFS getAnnotation(MatchContext context, RutaStream stream);
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanExpression.java Mon Jan  4 10:33:48 2016
@@ -19,29 +19,9 @@
 
 package org.apache.uima.ruta.expression.bool;
 
-import java.util.List;
-
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
-import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.string.AbstractStringExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
-
-public abstract class AbstractBooleanExpression extends AbstractStringExpression implements IBooleanExpression {
-
-  public boolean getBooleanValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
-    }
-    return getBooleanValue(parent, annotation, stream);
-  }
 
-  public abstract boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation,
-          RutaStream stream);
+public abstract class AbstractBooleanExpression extends AbstractStringExpression implements
+        IBooleanExpression {
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java Mon Jan  4 10:33:48 2016
@@ -25,9 +25,9 @@ import java.util.List;
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class BooleanFeatureExpression extends AbstractBooleanExpression {
 
@@ -39,11 +39,12 @@ public class BooleanFeatureExpression ex
   }
 
   @Override
-  public boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    Type type = fe.getTypeExpr(parent).getType(parent);
-    Feature feature = fe.getFeature(parent);
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+    AnnotationFS annotation = context.getAnnotation();
+    Type type = fe.getTypeExpr(context, stream).getType(context, stream);
+    Feature feature = fe.getFeature(context, stream);
     List<AnnotationFS> list = getTargetAnnotation(annotation, type, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, parent,
+    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
             false);
     if (!featureAnnotations.isEmpty()) {
       AnnotationFS next = featureAnnotations.iterator().next();
@@ -53,8 +54,8 @@ public class BooleanFeatureExpression ex
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return "" + getBooleanValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return String.valueOf(getBooleanValue(context, stream));
   }
 
   public FeatureExpression getFe() {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanNumberExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanNumberExpression.java Mon Jan  4 10:33:48 2016
@@ -19,10 +19,9 @@
 
 package org.apache.uima.ruta.expression.bool;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class BooleanNumberExpression extends AbstractBooleanExpression {
 
@@ -40,9 +39,9 @@ public class BooleanNumberExpression ext
   }
 
   @Override
-  public boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    double doubleValue1 = getFristExpression().getDoubleValue(parent, annotation, stream);
-    double doubleValue2 = getSecondExpression().getDoubleValue(parent, annotation, stream);
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+    double doubleValue1 = getFristExpression().getDoubleValue(context, stream);
+    double doubleValue2 = getSecondExpression().getDoubleValue(context, stream);
     return eval(doubleValue1, getOperator(), doubleValue2);
   }
 
@@ -76,9 +75,8 @@ public class BooleanNumberExpression ext
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return e1.getStringValue(parent, annotation, stream) + " " + op + " "
-            + e2.getStringValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return e1.getStringValue(context, stream) + " " + op + " " + e2.getStringValue(context, stream);
   }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java Mon Jan  4 10:33:48 2016
@@ -20,20 +20,19 @@
 package org.apache.uima.ruta.expression.bool;
 
 import org.apache.uima.cas.Type;
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class BooleanTypeExpression extends AbstractBooleanExpression {
 
-  private final TypeExpression e1;
+  private final ITypeExpression e1;
 
   private final String op;
 
-  private final TypeExpression e2;
+  private final ITypeExpression e2;
 
-  public BooleanTypeExpression(TypeExpression e1, String op, TypeExpression e2) {
+  public BooleanTypeExpression(ITypeExpression e1, String op, ITypeExpression e2) {
     super();
     this.e1 = e1;
     this.op = op;
@@ -41,10 +40,10 @@ public class BooleanTypeExpression exten
   }
 
   @Override
-  public boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    Type type1 = getFristExpression().getType(parent);
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+    Type type1 = getFristExpression().getType(context, stream);
     String first = type1.getName();
-    Type type2 = getSecondExpression().getType(parent);
+    Type type2 = getSecondExpression().getType(context, stream);
     String second = type2.getName();
     return eval(first, getOperator(), second);
   }
@@ -58,7 +57,7 @@ public class BooleanTypeExpression exten
     return false;
   }
 
-  public TypeExpression getFristExpression() {
+  public ITypeExpression getFristExpression() {
     return e1;
   }
 
@@ -66,14 +65,13 @@ public class BooleanTypeExpression exten
     return op;
   }
 
-  public TypeExpression getSecondExpression() {
+  public ITypeExpression getSecondExpression() {
     return e2;
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return e1.getStringValue(parent, annotation, stream) + " " + op + " "
-            + e2.getStringValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return e1.getStringValue(context, stream) + " " + op + " " + e2.getStringValue(context, stream);
   }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/IBooleanExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/IBooleanExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/IBooleanExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/IBooleanExpression.java Mon Jan  4 10:33:48 2016
@@ -19,17 +19,12 @@
 
 package org.apache.uima.ruta.expression.bool;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.string.IStringExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public interface IBooleanExpression extends IStringExpression {
-  
-  boolean getBooleanValue(RutaBlock parent, RuleMatch match, RuleElement element, RutaStream stream);
 
-  boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
+  boolean getBooleanValue(MatchContext context, RutaStream stream);
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanExpression.java Mon Jan  4 10:33:48 2016
@@ -19,9 +19,8 @@
 
 package org.apache.uima.ruta.expression.bool;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleBooleanExpression extends AbstractBooleanExpression {
 
@@ -33,7 +32,7 @@ public class SimpleBooleanExpression ext
   }
 
   @Override
-  public boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
     return getPrimitiveValue();
   }
 
@@ -42,8 +41,8 @@ public class SimpleBooleanExpression ext
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return getBooleanValue(parent, annotation, stream) ? "true" : "false";
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return getBooleanValue(context, stream) ? "true" : "false";
   }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanFunction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanFunction.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanFunction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanFunction.java Mon Jan  4 10:33:48 2016
@@ -19,9 +19,8 @@
 
 package org.apache.uima.ruta.expression.bool;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleBooleanFunction extends AbstractBooleanExpression {
 
@@ -39,9 +38,9 @@ public class SimpleBooleanFunction exten
   }
 
   @Override
-  public boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    boolean b1 = e1.getBooleanValue(parent, annotation, stream);
-    boolean b2 = e2.getBooleanValue(parent, annotation, stream);
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+    boolean b1 = e1.getBooleanValue(context, stream);
+    boolean b2 = e2.getBooleanValue(context, stream);
     if ("XOR".equals(op)) {
       return (b1 || b2) && !(b1 && b2);
     } else if ("==".equals(op)) {
@@ -53,9 +52,8 @@ public class SimpleBooleanFunction exten
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return e1.getStringValue(parent, annotation, stream) + " " + op + " "
-            + e2.getStringValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return e1.getStringValue(context, stream) + " " + op + " " + e2.getStringValue(context, stream);
   }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java Mon Jan  4 10:33:48 2016
@@ -24,23 +24,23 @@ import java.util.List;
 
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.RutaExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public abstract class FeatureExpression extends RutaExpression {
 
-  public abstract Feature getFeature(RutaBlock parent);
+  public abstract Feature getFeature(MatchContext context, RutaStream stream);
 
-  public abstract List<Feature> getFeatures(RutaBlock parent);
+  public abstract List<Feature> getFeatures(MatchContext context, RutaStream stream);
 
-  public abstract List<String> getFeatureStringList(RutaBlock parent);
+  public abstract List<String> getFeatureStringList(MatchContext context, RutaStream stream);
 
-  public abstract TypeExpression getTypeExpr(RutaBlock parent);
+  public abstract ITypeExpression getTypeExpr(MatchContext context, RutaStream stream);
 
   public abstract Collection<AnnotationFS> getFeatureAnnotations(
-          Collection<AnnotationFS> annotations, RutaStream stream, RutaBlock parent,
+          Collection<AnnotationFS> annotations, RutaStream stream, MatchContext context,
           boolean checkOnFeatureValue);
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java Mon Jan  4 10:33:48 2016
@@ -35,6 +35,7 @@ import org.apache.uima.ruta.expression.R
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class FeatureMatchExpression extends SimpleFeatureExpression {
 
@@ -46,21 +47,13 @@ public class FeatureMatchExpression exte
 
   private String op;
 
-  public FeatureMatchExpression(FeatureExpression f, String op, IRutaExpression arg,
-          RutaBlock parent) {
-    super(f.getTypeExpr(parent), f.getFeatureStringList(parent));
+  public FeatureMatchExpression(MatchReference mr, String op, IRutaExpression arg, RutaBlock env) {
+    super(mr);
     this.op = op;
     this.arg = arg;
   }
 
-  public FeatureMatchExpression(MatchReference mr, RutaBlock env) {
-    super(mr);
-  }
-
   public IRutaExpression getArg() {
-    if (getMatchReference() != null && arg == null) {
-      arg = getMatchReference().getArg();
-    }
     return arg;
   }
 
@@ -69,9 +62,6 @@ public class FeatureMatchExpression exte
   }
 
   public String getOp() {
-    if (getMatchReference() != null && op == null) {
-      op = getMatchReference().getOp();
-    }
     return op;
   }
 
@@ -79,20 +69,20 @@ public class FeatureMatchExpression exte
     this.op = op;
   }
 
-  public boolean checkFeatureValue(AnnotationFS afs, RutaStream stream, RutaBlock parent) {
-    Feature feature = getFeature(parent);
-    return checkFeatureValue(afs, feature, stream, parent);
+  public boolean checkFeatureValue(AnnotationFS afs, MatchContext context, RutaStream stream) {
+    Feature feature = getFeature(context, stream);
+    return checkFeatureValue(afs, context, feature, stream);
   }
 
-  public boolean checkFeatureValue(AnnotationFS afs, Feature feature, RutaStream stream,
-          RutaBlock parent) {
+  public boolean checkFeatureValue(AnnotationFS afs, MatchContext context, Feature feature,
+          RutaStream stream) {
     // null is possibly coveredText
     String rn = feature == null ? UIMAConstants.TYPE_STRING : feature.getRange().getName();
     if (rn.equals(UIMAConstants.TYPE_BOOLEAN)) {
       Boolean v1 = afs.getBooleanValue(feature);
       if (getArg() instanceof IBooleanExpression) {
         IBooleanExpression expr = (IBooleanExpression) getArg();
-        Boolean v2 = expr.getBooleanValue(parent, afs, stream);
+        Boolean v2 = expr.getBooleanValue(context, stream);
         return compare(v1, v2);
       }
     } else if (rn.equals(UIMAConstants.TYPE_INTEGER) || rn.equals(UIMAConstants.TYPE_BYTE)
@@ -100,21 +90,21 @@ public class FeatureMatchExpression exte
       Integer v1 = afs.getIntValue(feature);
       if (getArg() instanceof INumberExpression) {
         INumberExpression expr = (INumberExpression) getArg();
-        Integer v2 = expr.getIntegerValue(parent, afs, stream);
+        Integer v2 = expr.getIntegerValue(context, stream);
         return compare(v1, v2);
       }
     } else if (rn.equals(UIMAConstants.TYPE_DOUBLE)) {
       Double v1 = afs.getDoubleValue(feature);
       if (getArg() instanceof INumberExpression) {
         INumberExpression expr = (INumberExpression) getArg();
-        Double v2 = expr.getDoubleValue(parent, afs, stream);
+        Double v2 = expr.getDoubleValue(context, stream);
         return compare(v1, v2);
       }
     } else if (rn.equals(UIMAConstants.TYPE_FLOAT)) {
       Float v1 = afs.getFloatValue(feature);
       if (getArg() instanceof INumberExpression) {
         INumberExpression expr = (INumberExpression) getArg();
-        Float v2 = expr.getFloatValue(parent, afs, stream);
+        Float v2 = expr.getFloatValue(context, stream);
         return compare(v1, v2);
       }
     } else if (rn.equals(UIMAConstants.TYPE_STRING)) {
@@ -125,14 +115,14 @@ public class FeatureMatchExpression exte
       }
       if (getArg() instanceof IStringExpression) {
         IStringExpression expr = (IStringExpression) getArg();
-        String v2 = expr.getStringValue(parent, afs, stream);
+        String v2 = expr.getStringValue(context, stream);
         return compare(v1, v2);
       }
     } else if (!feature.getRange().isPrimitive() && getArg() instanceof FeatureExpression) {
       FeatureExpression fe = (FeatureExpression) getArg();
       List<AnnotationFS> list = new ArrayList<AnnotationFS>(1);
       list.add(afs);
-      Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, parent,
+      Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
               false);
       return compare(afs.getFeatureValue(feature), featureAnnotations);
     }
@@ -188,4 +178,15 @@ public class FeatureMatchExpression exte
     return false;
   }
 
+  public String toString() {
+    String result = super.toString();
+    if(op != null) {
+      result += op;
+    }
+    if(arg != null) {
+      result += arg.toString();
+    }
+    return result;
+  }
+  
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/GenericFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/GenericFeatureExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/GenericFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/GenericFeatureExpression.java Mon Jan  4 10:33:48 2016
@@ -20,115 +20,88 @@
 package org.apache.uima.ruta.expression.feature;
 
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.ExpressionFactory;
 import org.apache.uima.ruta.expression.RutaExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.MatchContext;
 
-public class GenericFeatureExpression extends RutaExpression implements INumberExpression, IBooleanExpression, IStringExpression {
+public class GenericFeatureExpression extends RutaExpression implements INumberExpression,
+        IBooleanExpression, IStringExpression, IAnnotationExpression {
 
   private FeatureExpression featureExpression;
 
   private INumberExpression numberExpression;
-  
+
   private IStringExpression stringExpression;
-  
+
   private IBooleanExpression booleanExpression;
   
+  private IAnnotationExpression annotationExpression;
+
   public GenericFeatureExpression(FeatureExpression fe) {
     super();
     this.featureExpression = fe;
   }
-  
-  
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    if(stringExpression == null) {
-      stringExpression = ExpressionFactory.createStringFeatureExpression(featureExpression);
-    }
-    return stringExpression.getStringValue(parent, annotation, stream);
-  }
 
-  public String getStringValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    if(stringExpression == null) {
+  @Override
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    if (stringExpression == null) {
       stringExpression = ExpressionFactory.createStringFeatureExpression(featureExpression);
     }
-    return stringExpression.getStringValue(parent, match, element, stream);
-  }
-
-  public boolean getBooleanValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    if(booleanExpression == null) {
-      booleanExpression = ExpressionFactory.createBooleanFeatureExpression(featureExpression);
-    }
-    return booleanExpression.getBooleanValue(parent, match, element, stream);
+    return stringExpression.getStringValue(context, stream);
   }
 
-  public boolean getBooleanValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    if(booleanExpression == null) {
+  @Override
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+    if (booleanExpression == null) {
       booleanExpression = ExpressionFactory.createBooleanFeatureExpression(featureExpression);
     }
-    return booleanExpression.getBooleanValue(parent, annotation, stream);
+    return booleanExpression.getBooleanValue(context, stream);
   }
 
-  public int getIntegerValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    if(numberExpression == null) {
+  @Override
+  public int getIntegerValue(MatchContext context, RutaStream stream) {
+    if (numberExpression == null) {
       numberExpression = ExpressionFactory.createNumberFeatureExpression(featureExpression);
     }
-    return numberExpression.getIntegerValue(parent, match, element, stream);
+    return numberExpression.getIntegerValue(context, stream);
   }
 
-  public double getDoubleValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    if(numberExpression == null) {
+  @Override
+  public double getDoubleValue(MatchContext context, RutaStream stream) {
+    if (numberExpression == null) {
       numberExpression = ExpressionFactory.createNumberFeatureExpression(featureExpression);
     }
-    return numberExpression.getDoubleValue(parent, match, element, stream);
+    return numberExpression.getDoubleValue(context, stream);
   }
 
-  public float getFloatValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    if(numberExpression == null) {
+  @Override
+  public float getFloatValue(MatchContext context, RutaStream stream) {
+    if (numberExpression == null) {
       numberExpression = ExpressionFactory.createNumberFeatureExpression(featureExpression);
     }
-    return numberExpression.getFloatValue(parent, match, element, stream);
+    return numberExpression.getFloatValue(context, stream);
   }
 
-  public int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    if(numberExpression == null) {
-      numberExpression = ExpressionFactory.createNumberFeatureExpression(featureExpression);
+  @Override
+  public AnnotationFS getAnnotation(MatchContext context, RutaStream stream) {
+    if (annotationExpression == null) {
+      annotationExpression = ExpressionFactory.createAnnotationFeatureExpression(featureExpression);
     }
-    return numberExpression.getIntegerValue(parent, annotation, stream);
+    return annotationExpression.getAnnotation(context, stream);
   }
 
-  public double getDoubleValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    if(numberExpression == null) {
-      numberExpression = ExpressionFactory.createNumberFeatureExpression(featureExpression);
-    }
-    return numberExpression.getDoubleValue(parent, annotation, stream);
-  }
-
-  public float getFloatValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    if(numberExpression == null) {
-      numberExpression = ExpressionFactory.createNumberFeatureExpression(featureExpression);
-    }
-    return numberExpression.getFloatValue(parent, annotation, stream);
-  }
-
-
   public FeatureExpression getFeatureExpression() {
     return featureExpression;
   }
 
-
   public void setFeatureExpression(FeatureExpression featureExpression) {
     this.featureExpression = featureExpression;
   }
 
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java Mon Jan  4 10:33:48 2016
@@ -29,26 +29,26 @@ import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.UIMAConstants;
 import org.apache.uima.ruta.expression.IRutaExpression;
 import org.apache.uima.ruta.expression.MatchReference;
 import org.apache.uima.ruta.expression.NullExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.rule.AnnotationComparator;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleFeatureExpression extends FeatureExpression {
 
   private MatchReference mr;
 
-  private TypeExpression typeExpr;
+  private ITypeExpression typeExpr;
 
   private List<String> features;
 
   protected AnnotationComparator comparator = new AnnotationComparator();
 
-  public SimpleFeatureExpression(TypeExpression te, List<String> featureReferences) {
+  public SimpleFeatureExpression(ITypeExpression te, List<String> featureReferences) {
     super();
     this.typeExpr = te;
     this.features = featureReferences;
@@ -60,8 +60,8 @@ public class SimpleFeatureExpression ext
   }
 
   @Override
-  public Feature getFeature(RutaBlock parent) {
-    List<Feature> features = getFeatures(parent);
+  public Feature getFeature(MatchContext context, RutaStream stream) {
+    List<Feature> features = getFeatures(context, stream);
     if (features != null && !features.isEmpty()) {
       return features.get(features.size() - 1);
     } else {
@@ -70,17 +70,17 @@ public class SimpleFeatureExpression ext
   }
 
   @Override
-  public List<Feature> getFeatures(RutaBlock parent) {
+  public List<Feature> getFeatures(MatchContext context, RutaStream stream) {
     if (mr != null) {
-      typeExpr = mr.getTypeExpression(parent);
-      FeatureExpression featureExpression = mr.getFeatureExpression(parent);
+      typeExpr = mr.getTypeExpression(context, stream);
+      FeatureExpression featureExpression = mr.getFeatureExpression(context, stream);
       if (featureExpression == null) {
         return null;
       }
-      features = featureExpression.getFeatureStringList(parent);
+      features = featureExpression.getFeatureStringList(context, stream);
     }
     List<Feature> result = new ArrayList<Feature>();
-    Type type = typeExpr.getType(parent);
+    Type type = typeExpr.getType(context, stream);
     Feature feature = null;
     for (String each : features) {
       if (StringUtils.equals(each, UIMAConstants.FEATURE_COVERED_TEXT)) {
@@ -102,20 +102,20 @@ public class SimpleFeatureExpression ext
     return result;
   }
 
-  public TypeExpression getTypeExpr(RutaBlock parent) {
+  public ITypeExpression getTypeExpr(MatchContext context, RutaStream stream) {
     if (mr != null) {
-      return mr.getTypeExpression(parent);
+      return mr.getTypeExpression(context, stream);
     }
     return typeExpr;
   }
 
-  public void setTypeExpr(TypeExpression typeExpr) {
+  public void setTypeExpr(ITypeExpression typeExpr) {
     this.typeExpr = typeExpr;
   }
 
-  public List<String> getFeatureStringList(RutaBlock parent) {
+  public List<String> getFeatureStringList(MatchContext context, RutaStream stream) {
     if (mr != null) {
-      features = mr.getFeatureExpression(parent).getFeatureStringList(parent);
+      features = mr.getFeatureExpression(context, stream).getFeatureStringList(context, stream);
     }
     return features;
   }
@@ -125,37 +125,40 @@ public class SimpleFeatureExpression ext
   }
 
   public Collection<AnnotationFS> getFeatureAnnotations(Collection<AnnotationFS> annotations,
-          RutaStream stream, RutaBlock parent, boolean checkOnFeatureValue) {
+          RutaStream stream, MatchContext context, boolean checkOnFeatureValue) {
     Collection<AnnotationFS> result = new TreeSet<AnnotationFS>(comparator);
-    List<Feature> features = getFeatures(parent);
+    List<Feature> features = getFeatures(context, stream);
+
     for (AnnotationFS eachBase : annotations) {
       AnnotationFS afs = eachBase;
-      for (Feature feature : features) {
-        if (afs == null) {
-          break;
-        }
-        if (feature == null || feature.getRange().isPrimitive()) {
-          // feature == null -> this is the coveredText "feature"
-          if (this instanceof FeatureMatchExpression) {
-            FeatureMatchExpression fme = (FeatureMatchExpression) this;
-            if (checkOnFeatureValue) {
-              if (fme.checkFeatureValue(afs, feature, stream, parent)) {
+      if (features != null) {
+        for (Feature feature : features) {
+          if (afs == null) {
+            break;
+          }
+          if (feature == null || feature.getRange().isPrimitive()) {
+            // feature == null -> this is the coveredText "feature"
+            if (this instanceof FeatureMatchExpression) {
+              FeatureMatchExpression fme = (FeatureMatchExpression) this;
+              if (checkOnFeatureValue) {
+                if (fme.checkFeatureValue(afs, context, feature, stream)) {
+                  result.add(afs);
+                }
+              } else {
                 result.add(afs);
               }
+              break;
             } else {
               result.add(afs);
             }
-            break;
           } else {
-            result.add(afs);
-          }
-        } else {
-          FeatureStructure value = afs.getFeatureValue(feature);
-          if (value instanceof AnnotationFS) {
-            afs = (AnnotationFS) value;
-          } else if (value != null) {
-            throw new IllegalArgumentException(value.getType()
-                    + " is not supported in a feature match expression (" + mr.getMatch() + ").");
+            FeatureStructure value = afs.getFeatureValue(feature);
+            if (value instanceof AnnotationFS) {
+              afs = (AnnotationFS) value;
+            } else if (value != null) {
+              throw new IllegalArgumentException(value.getType()
+                      + " is not supported in a feature match expression (" + mr.getMatch() + ").");
+            }
           }
         }
       }
@@ -178,4 +181,8 @@ public class SimpleFeatureExpression ext
     return mr;
   }
 
+  public String toString() {
+    return mr.getMatch();
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/ListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/ListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/ListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/ListExpression.java Mon Jan  4 10:33:48 2016
@@ -21,18 +21,17 @@ package org.apache.uima.ruta.expression.
 
 import java.util.List;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.string.AbstractStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public abstract class ListExpression<T> extends AbstractStringExpression {
 
-  public abstract List<T> getList(RutaBlock parent, RutaStream stream);
+  public abstract List<T> getList(MatchContext context, RutaStream stream);
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return getList(parent, stream).toString();
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return getList(context, stream).toString();
   }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleBooleanListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleBooleanListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleBooleanListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleBooleanListExpression.java Mon Jan  4 10:33:48 2016
@@ -22,9 +22,9 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleBooleanListExpression extends BooleanListExpression {
 
@@ -36,11 +36,11 @@ public class SimpleBooleanListExpression
   }
 
   @Override
-  public List<Boolean> getList(RutaBlock parent, RutaStream stream) {
+  public List<Boolean> getList(MatchContext context, RutaStream stream) {
     List<Boolean> result = new ArrayList<Boolean>();
     for (IBooleanExpression each : list) {
-   // TODO support arrays
-      result.add(each.getBooleanValue(parent, null, stream));
+      // TODO support arrays
+      result.add(each.getBooleanValue(context, stream));
     }
     return result;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleNumberListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleNumberListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleNumberListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleNumberListExpression.java Mon Jan  4 10:33:48 2016
@@ -22,9 +22,9 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleNumberListExpression extends NumberListExpression {
 
@@ -36,11 +36,11 @@ public class SimpleNumberListExpression
   }
 
   @Override
-  public List<Number> getList(RutaBlock parent, RutaStream stream) {
+  public List<Number> getList(MatchContext context, RutaStream stream) {
     List<Number> result = new ArrayList<Number>();
     for (INumberExpression each : list) {
-   // TODO support arrays
-      result.add(each.getDoubleValue(parent, null, stream));
+      // TODO support arrays
+      result.add(each.getDoubleValue(context, stream));
     }
     return result;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleStringListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleStringListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleStringListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleStringListExpression.java Mon Jan  4 10:33:48 2016
@@ -22,9 +22,9 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleStringListExpression extends StringListExpression {
 
@@ -36,11 +36,11 @@ public class SimpleStringListExpression
   }
 
   @Override
-  public List<String> getList(RutaBlock parent, RutaStream stream) {
+  public List<String> getList(MatchContext context, RutaStream stream) {
     List<String> result = new ArrayList<String>();
     for (IStringExpression each : list) {
-   // TODO support arrays
-      result.add(each.getStringValue(parent, null, stream));
+      // TODO support arrays
+      result.add(each.getStringValue(context, stream));
     }
     return result;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java Mon Jan  4 10:33:48 2016
@@ -23,29 +23,29 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.uima.cas.Type;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleTypeListExpression extends TypeListExpression {
 
-  private List<TypeExpression> list;
+  private List<ITypeExpression> list;
 
-  public SimpleTypeListExpression(List<TypeExpression> list) {
+  public SimpleTypeListExpression(List<ITypeExpression> list) {
     super();
     this.list = list;
   }
 
   @Override
-  public List<Type> getList(RutaBlock parent, RutaStream stream) {
+  public List<Type> getList(MatchContext context, RutaStream stream) {
     List<Type> result = new ArrayList<Type>();
-    for (TypeExpression each : list) {
-      result.add(each.getType(parent));
+    for (ITypeExpression each : list) {
+      result.add(each.getType(context, stream));
     }
     return result;
   }
 
-  public List<TypeExpression> getList() {
+  public List<ITypeExpression> getList() {
     return list;
   }
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java Mon Jan  4 10:33:48 2016
@@ -22,13 +22,13 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.IRutaExpression;
-import org.apache.uima.ruta.expression.bool.AbstractBooleanExpression;
-import org.apache.uima.ruta.expression.number.AbstractNumberExpression;
-import org.apache.uima.ruta.expression.string.AbstractStringExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.bool.IBooleanExpression;
+import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class UntypedListExpression extends ListExpression<Object> {
 
@@ -40,20 +40,20 @@ public class UntypedListExpression exten
   }
 
   @Override
-  public List<Object> getList(RutaBlock parent, RutaStream stream) {
+  public List<Object> getList(MatchContext context, RutaStream stream) {
     List<Object> result = new ArrayList<Object>();
     for (IRutaExpression each : list) {
-   // TODO support arrays
-      if (each instanceof AbstractBooleanExpression) {
-        result.add(((AbstractBooleanExpression) each).getBooleanValue(parent, null, stream));
-      } else if (each instanceof AbstractNumberExpression) {
-        result.add(((AbstractNumberExpression) each).getDoubleValue(parent, null, stream));
-      } else if (each instanceof TypeExpression) {
-        result.add(((TypeExpression) each).getType(parent));
+      // TODO support arrays
+      if (each instanceof IBooleanExpression) {
+        result.add(((IBooleanExpression) each).getBooleanValue(context, stream));
+      } else if (each instanceof INumberExpression) {
+        result.add(((INumberExpression) each).getDoubleValue(context, stream));
+      } else if (each instanceof ITypeExpression) {
+        result.add(((ITypeExpression) each).getType(context, stream));
       } else if (each instanceof ListExpression) {
-        result.add(((ListExpression<?>) each).getList(parent, stream));
-      } else if (each instanceof AbstractStringExpression) {
-        result.add(((AbstractStringExpression) each).getStringValue(parent, null, stream));
+        result.add(((ListExpression<?>) each).getList(context, stream));
+      } else if (each instanceof IStringExpression) {
+        result.add(((IStringExpression) each).getStringValue(context, stream));
       }
     }
     return result;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/AbstractNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/AbstractNumberExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/AbstractNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/AbstractNumberExpression.java Mon Jan  4 10:33:48 2016
@@ -19,50 +19,11 @@
 
 package org.apache.uima.ruta.expression.number;
 
-import java.util.List;
-
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
-import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.string.AbstractStringExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
-
-public abstract class AbstractNumberExpression extends AbstractStringExpression implements INumberExpression {
-
-  public int getIntegerValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
-    }
-    return getIntegerValue(parent, annotation, stream);
-  }
 
-  public double getDoubleValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
-    }
-    return getDoubleValue(parent, annotation, stream);
-  }
+public abstract class AbstractNumberExpression extends AbstractStringExpression implements
+        INumberExpression {
 
-  public float getFloatValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
-    }
-    return getFloatValue(parent, annotation, stream);
-  }
-  
   protected double calculate(double t1, double t2, String op) {
     if ("+".equals(op)) {
       return t1 + t2;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java Mon Jan  4 10:33:48 2016
@@ -21,9 +21,8 @@ package org.apache.uima.ruta.expression.
 
 import java.util.List;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class ComposedNumberExpression extends AbstractNumberExpression {
 
@@ -37,44 +36,44 @@ public class ComposedNumberExpression ex
     this.ops = ops;
   }
 
-  public double getDoubleValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public double getDoubleValue(MatchContext context, RutaStream stream) {
     INumberExpression numberExpression = getExpressions().get(0);
     if (numberExpression == null) {
       return 0;
     }
-    double result = numberExpression.getDoubleValue(parent, annotation, stream);
+    double result = numberExpression.getDoubleValue(context, stream);
     for (int i = 0; i < getOperators().size(); i++) {
       double second = 0;
       if (getExpressions().size() > i + 1) {
-        second = getExpressions().get(i + 1).getDoubleValue(parent, annotation, stream);
+        second = getExpressions().get(i + 1).getDoubleValue(context, stream);
       }
       result = calculate(result, second, getOperators().get(i));
     }
     return result;
   }
 
-  public float getFloatValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public float getFloatValue(MatchContext context, RutaStream stream) {
     INumberExpression numberExpression = getExpressions().get(0);
     if (numberExpression == null) {
       return 0;
     }
-    float result = numberExpression.getFloatValue(parent, annotation, stream);
+    float result = numberExpression.getFloatValue(context, stream);
     for (int i = 0; i < getOperators().size(); i++) {
       float second = 0;
       if (getExpressions().size() > i + 1) {
-        second = getExpressions().get(i + 1).getFloatValue(parent, annotation, stream);
+        second = getExpressions().get(i + 1).getFloatValue(context, stream);
       }
       result = calculate(result, second, getOperators().get(i));
     }
     return result;
   }
 
-  public int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    int result = getExpressions().get(0).getIntegerValue(parent, annotation, stream);
+  public int getIntegerValue(MatchContext context, RutaStream stream) {
+    int result = getExpressions().get(0).getIntegerValue(context, stream);
     for (int i = 0; i < getOperators().size(); i++) {
       int second = 0;
       if (getExpressions().size() > i + 1) {
-        second = getExpressions().get(i + 1).getIntegerValue(parent, annotation, stream);
+        second = getExpressions().get(i + 1).getIntegerValue(context, stream);
       }
       result = calculate(result, second, getOperators().get(i));
     }
@@ -82,8 +81,8 @@ public class ComposedNumberExpression ex
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return "" + getDoubleValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return "" + getDoubleValue(context, stream);
   }
 
   public List<INumberExpression> getExpressions() {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/INumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/INumberExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/INumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/INumberExpression.java Mon Jan  4 10:33:48 2016
@@ -19,25 +19,16 @@
 
 package org.apache.uima.ruta.expression.number;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.string.IStringExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public interface INumberExpression extends IStringExpression {
 
-  int getIntegerValue(RutaBlock parent, RuleMatch match, RuleElement element, RutaStream stream);
+  int getIntegerValue(MatchContext context, RutaStream stream);
 
-  double getDoubleValue(RutaBlock parent, RuleMatch match, RuleElement element, RutaStream stream);
+  double getDoubleValue(MatchContext context, RutaStream stream);
 
-  float getFloatValue(RutaBlock parent, RuleMatch match, RuleElement element, RutaStream stream);
-
-  int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
-
-  double getDoubleValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
-
-  float getFloatValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
+  float getFloatValue(MatchContext context, RutaStream stream);
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java Mon Jan  4 10:33:48 2016
@@ -19,9 +19,8 @@
 
 package org.apache.uima.ruta.expression.number;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class NegativeNumberExpression extends AbstractNumberExpression {
 
@@ -32,20 +31,20 @@ public class NegativeNumberExpression ex
     this.ne = simpleNumberExpression;
   }
 
-  public double getDoubleValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return -ne.getDoubleValue(parent, annotation, stream);
+  public double getDoubleValue(MatchContext context, RutaStream stream) {
+    return -ne.getDoubleValue(context, stream);
   }
 
-  public float getFloatValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return -ne.getFloatValue(parent, annotation, stream);
+  public float getFloatValue(MatchContext context, RutaStream stream) {
+    return -ne.getFloatValue(context, stream);
   }
 
-  public int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return -ne.getIntegerValue(parent, annotation, stream);
+  public int getIntegerValue(MatchContext context, RutaStream stream) {
+    return -ne.getIntegerValue(context, stream);
   }
 
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return "-" + ne.getStringValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return "-" + ne.getStringValue(context, stream);
   }
 
   public INumberExpression getExpression() {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java Mon Jan  4 10:33:48 2016
@@ -25,10 +25,10 @@ import java.util.List;
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.UIMAConstants;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class NumberFeatureExpression extends AbstractNumberExpression {
 
@@ -39,28 +39,29 @@ public class NumberFeatureExpression ext
     this.fe = fe;
   }
 
-  public int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    Number v = getNumberValue(parent, annotation, stream);
+  public int getIntegerValue(MatchContext context, RutaStream stream) {
+    Number v = getNumberValue(context, stream);
     return v == null ? 0 : v.intValue();
   }
 
-  public double getDoubleValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    Number v = getNumberValue(parent, annotation, stream);
+  public double getDoubleValue(MatchContext context, RutaStream stream) {
+    Number v = getNumberValue(context, stream);
     return v == null ? 0 : v.doubleValue();
   }
 
-  public float getFloatValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    Number v = getNumberValue(parent, annotation, stream);
+  public float getFloatValue(MatchContext context, RutaStream stream) {
+    Number v = getNumberValue(context, stream);
     return v == null ? 0 : v.floatValue();
   }
 
-  private Number getNumberValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  private Number getNumberValue(MatchContext context, RutaStream stream) {
+    AnnotationFS annotation = context.getAnnotation();
     Number result = null;
-    Type type = fe.getTypeExpr(parent).getType(parent);
-    Feature feature = fe.getFeature(parent);
+    Type type = fe.getTypeExpr(context, stream).getType(context, stream);
+    Feature feature = fe.getFeature(context, stream);
     Type range = feature.getRange();
     List<AnnotationFS> list = getTargetAnnotation(annotation, type, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, parent,
+    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
             false);
     if (!featureAnnotations.isEmpty()) {
       AnnotationFS next = featureAnnotations.iterator().next();
@@ -82,8 +83,8 @@ public class NumberFeatureExpression ext
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
-    return "" + getNumberValue(parent, annotation, stream);
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return "" + getNumberValue(context, stream);
   }
 
   public FeatureExpression getFe() {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java Mon Jan  4 10:33:48 2016
@@ -19,9 +19,8 @@
 
 package org.apache.uima.ruta.expression.number;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class SimpleNumberExpression extends AbstractNumberExpression {
 
@@ -32,15 +31,15 @@ public class SimpleNumberExpression exte
     this.number = number;
   }
 
-  public double getDoubleValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public double getDoubleValue(MatchContext context, RutaStream stream) {
     return number.doubleValue();
   }
 
-  public float getFloatValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public float getFloatValue(MatchContext context, RutaStream stream) {
     return number.floatValue();
   }
 
-  public int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public int getIntegerValue(MatchContext context, RutaStream stream) {
     return number.intValue();
   }
 
@@ -48,12 +47,12 @@ public class SimpleNumberExpression exte
     return number;
   }
 
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public String getStringValue(MatchContext context, RutaStream stream) {
     boolean floating = number.intValue() != number.doubleValue();
     if (floating) {
-      return "" + getDoubleValue(parent, annotation, stream);
+      return "" + getDoubleValue(context, stream);
     } else {
-      return "" + getIntegerValue(parent, annotation, stream);
+      return "" + getIntegerValue(context, stream);
     }
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordListExpression.java Mon Jan  4 10:33:48 2016
@@ -22,9 +22,9 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.uima.ruta.RutaStatement;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.resource.RutaWordList;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class ExternalWordListExpression extends WordListExpression {
 
@@ -39,13 +39,12 @@ public class ExternalWordListExpression
   }
 
   @Override
-  public RutaWordList getList(RutaStatement element) {
+  public RutaWordList getList(MatchContext context) {
     List<String> argList = new ArrayList<String>();
     for (IStringExpression each : args) {
-      argList.add(each.getStringValue(element.getParent(), null, null));
+      argList.add(each.getStringValue(context, null));
     }
-    
-    
+
     return null;
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordTableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordTableExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordTableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ExternalWordTableExpression.java Mon Jan  4 10:33:48 2016
@@ -22,9 +22,9 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.uima.ruta.RutaStatement;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.resource.RutaTable;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class ExternalWordTableExpression extends WordTableExpression {
 
@@ -39,12 +39,12 @@ public class ExternalWordTableExpression
   }
 
   @Override
-  public RutaTable getTable(RutaStatement element) {
+  public RutaTable getTable(MatchContext context) {
     List<String> argList = new ArrayList<String>();
     for (IStringExpression each : args) {
-      argList.add(each.getStringValue(element.getParent(), null, null));
+      argList.add(each.getStringValue(context, null));
     }
-    
+
     return null;
   }
 
@@ -56,5 +56,4 @@ public class ExternalWordTableExpression
     return className;
   }
 
-  
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordListExpression.java Mon Jan  4 10:33:48 2016
@@ -19,8 +19,9 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.resource.RutaWordList;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class LiteralWordListExpression extends WordListExpression {
 
@@ -40,8 +41,9 @@ public class LiteralWordListExpression e
   }
 
   @Override
-  public RutaWordList getList(RutaStatement element) {
-    RutaWordList list = element.getEnvironment().getWordList(getText());
+  public RutaWordList getList(MatchContext context) {
+    RutaBlock parent = context.getParent();
+    RutaWordList list = parent.getEnvironment().getWordList(getText());
     return list;
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordTableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordTableExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordTableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/LiteralWordTableExpression.java Mon Jan  4 10:33:48 2016
@@ -19,8 +19,9 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.resource.RutaTable;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class LiteralWordTableExpression extends WordTableExpression {
 
@@ -40,8 +41,9 @@ public class LiteralWordTableExpression
   }
 
   @Override
-  public RutaTable getTable(RutaStatement element) {
-    RutaTable table = element.getEnvironment().getWordTable(getText());
+  public RutaTable getTable(MatchContext context) {
+    RutaBlock parent = context.getParent();
+    RutaTable table = parent.getEnvironment().getWordTable(getText());
     return table;
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordListExpression.java Mon Jan  4 10:33:48 2016
@@ -19,8 +19,9 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.resource.RutaWordList;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class ReferenceWordListExpression extends WordListExpression {
 
@@ -32,8 +33,9 @@ public class ReferenceWordListExpression
   }
 
   @Override
-  public RutaWordList getList(RutaStatement element) {
-    return element.getEnvironment().getVariableValue(ref, RutaWordList.class);
+  public RutaWordList getList(MatchContext context) {
+    RutaBlock parent = context.getParent();
+    return parent.getEnvironment().getVariableValue(ref, RutaWordList.class);
   }
 
   public String getRef() {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordTableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordTableExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordTableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/ReferenceWordTableExpression.java Mon Jan  4 10:33:48 2016
@@ -19,8 +19,9 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.resource.RutaTable;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class ReferenceWordTableExpression extends WordTableExpression {
 
@@ -32,8 +33,9 @@ public class ReferenceWordTableExpressio
   }
 
   @Override
-  public RutaTable getTable(RutaStatement element) {
-    return element.getEnvironment().getVariableValue(ref, RutaTable.class);
+  public RutaTable getTable(MatchContext context) {
+    RutaBlock parent = context.getParent();
+    return parent.getEnvironment().getVariableValue(ref, RutaTable.class);
   }
 
   public String getRef() {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordListExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordListExpression.java Mon Jan  4 10:33:48 2016
@@ -19,12 +19,12 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import org.apache.uima.ruta.RutaStatement;
 import org.apache.uima.ruta.expression.RutaExpression;
 import org.apache.uima.ruta.resource.RutaWordList;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public abstract class WordListExpression extends RutaExpression {
 
-  public abstract RutaWordList getList(RutaStatement element);
+  public abstract RutaWordList getList(MatchContext context);
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordTableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordTableExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordTableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/resource/WordTableExpression.java Mon Jan  4 10:33:48 2016
@@ -19,12 +19,12 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import org.apache.uima.ruta.RutaStatement;
 import org.apache.uima.ruta.expression.RutaExpression;
 import org.apache.uima.ruta.resource.RutaTable;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public abstract class WordTableExpression extends RutaExpression {
 
-  public abstract RutaTable getTable(RutaStatement element);
+  public abstract RutaTable getTable(MatchContext context);
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringExpression.java Mon Jan  4 10:33:48 2016
@@ -19,28 +19,8 @@
 
 package org.apache.uima.ruta.expression.string;
 
-import java.util.List;
-
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
-import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.RutaExpression;
-import org.apache.uima.ruta.rule.RuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
 
 public abstract class AbstractStringExpression extends RutaExpression implements IStringExpression {
 
-  public String getStringValue(RutaBlock parent, RuleMatch match, RuleElement element,
-          RutaStream stream) {
-    List<AnnotationFS> matchedAnnotationsOf = match.getMatchedAnnotationsOfElement(element);
-    // TODO: do we need to select the correct annotation?
-    AnnotationFS annotation = null;
-    if (!matchedAnnotationsOf.isEmpty()) {
-      annotation = matchedAnnotationsOf.get(0);
-    }
-    return getStringValue(parent, annotation, stream);
-  }
-
-  public abstract String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream);
-
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/ComposedStringExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/ComposedStringExpression.java?rev=1722834&r1=1722833&r2=1722834&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/ComposedStringExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/ComposedStringExpression.java Mon Jan  4 10:33:48 2016
@@ -21,9 +21,8 @@ package org.apache.uima.ruta.expression.
 
 import java.util.List;
 
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.rule.MatchContext;
 
 public class ComposedStringExpression extends LiteralStringExpression {
 
@@ -35,10 +34,10 @@ public class ComposedStringExpression ex
   }
 
   @Override
-  public String getStringValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) {
+  public String getStringValue(MatchContext context, RutaStream stream) {
     StringBuilder result = new StringBuilder();
     for (IStringExpression each : getExpressions()) {
-      result.append(each.getStringValue(parent, annotation, stream));
+      result.append(each.getStringValue(context, stream));
     }
     return result.toString();
   }