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/12 16:34:07 UTC

svn commit: r1724261 - in /uima/ruta/trunk/ruta-core/src: main/antlr3/org/apache/uima/ruta/parser/ main/java/org/apache/uima/ruta/ main/java/org/apache/uima/ruta/condition/ main/java/org/apache/uima/ruta/expression/bool/ main/java/org/apache/uima/ruta/...

Author: pkluegl
Date: Tue Jan 12 15:34:07 2016
New Revision: 1724261

URL: http://svn.apache.org/viewvc?rev=1724261&view=rev
Log:
UIMA-4734
- list expression for generic feature expressions

Added:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/utils/RutaListUtils.java   (with props)
Modified:
    uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/UIMAConstants.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/ContainsCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/GenericFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringListExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Tue Jan 12 15:34:07 2016
@@ -1398,14 +1398,25 @@ conditionAnd returns [AbstractRutaCondit
     ;
     
 conditionContains returns [AbstractRutaCondition cond = null]
- options {
+options {
 	backtrack = true;
 }
+@init {
+List<IRutaExpression> args = new ArrayList<>();
+}
     :   
-    CONTAINS LPAREN (type = typeExpression | list = plainListExpression COMMA a = argument) 
-    (COMMA min = numberExpression COMMA max = numberExpression (COMMA percent = booleanExpression)?)? RPAREN
-    {if(type != null) {cond = ConditionFactory.createConditionContains(type, min, max, percent,$blockDeclaration::env);}
-    else {cond = ConditionFactory.createConditionContains(list,a, min, max, percent, $blockDeclaration::env);};}
+    CONTAINS LPAREN 
+    a = argument {args.add(a);} 
+    (COMMA a = argument{args.add(a);})*
+    RPAREN
+    
+    //(type = typeExpression | list = plainListExpression COMMA a = argument) 
+    //(COMMA min = numberExpression COMMA max = numberExpression (COMMA percent = booleanExpression)?)? RPAREN
+    {
+    cond = ConditionFactory.createConditionContains(args, $blockDeclaration::env);
+    //if(type != null) {cond = ConditionFactory.createConditionContains(type, min, max, percent,$blockDeclaration::env);}
+    //else if(list != null) {cond = ConditionFactory.createConditionContains(list, a, min, max, percent, $blockDeclaration::env);}
+    }
     ;
 conditionContextCount returns [AbstractRutaCondition cond = null]
     :   

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Tue Jan 12 15:34:07 2016
@@ -32,17 +32,23 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 
+import org.apache.uima.cas.BooleanArrayFS;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CASException;
 import org.apache.uima.cas.ConstraintFactory;
+import org.apache.uima.cas.DoubleArrayFS;
 import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.FSMatchConstraint;
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.FloatArrayFS;
+import org.apache.uima.cas.IntArrayFS;
+import org.apache.uima.cas.StringArrayFS;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.impl.FSIteratorImplBase;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.fit.util.FSCollectionFactory;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.ruta.engine.RutaEngine;
@@ -51,11 +57,14 @@ import org.apache.uima.ruta.expression.I
 import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
 import org.apache.uima.ruta.expression.annotation.IAnnotationListExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
+import org.apache.uima.ruta.expression.bool.IBooleanListExpression;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
 import org.apache.uima.ruta.expression.feature.GenericFeatureExpression;
 import org.apache.uima.ruta.expression.feature.SimpleFeatureExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.expression.number.INumberListExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.expression.string.IStringListExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.rule.AbstractRule;
 import org.apache.uima.ruta.rule.AbstractRuleMatch;
@@ -63,6 +72,7 @@ import org.apache.uima.ruta.rule.MatchCo
 import org.apache.uima.ruta.rule.RuleElement;
 import org.apache.uima.ruta.type.RutaAnnotation;
 import org.apache.uima.ruta.type.RutaBasic;
+import org.apache.uima.ruta.utils.RutaListUtils;
 import org.apache.uima.ruta.utils.UIMAUtils;
 import org.apache.uima.ruta.visitor.InferenceCrowd;
 
@@ -927,6 +937,7 @@ public class RutaStream extends FSIterat
     if (feature == null) {
       throw new IllegalArgumentException("Not able to assign feature value (e.g., coveredText).");
     }
+    CAS cas = annotation.getCAS();
     String range = feature.getRange().getName();
     if (range.equals(UIMAConstants.TYPE_STRING)) {
       if (value instanceof IStringExpression) {
@@ -934,29 +945,96 @@ public class RutaStream extends FSIterat
         String string = stringExpr.getStringValue(context, this);
         annotation.setStringValue(feature, string);
       }
-    } else if (value instanceof INumberExpression
-            && (range.equals(UIMAConstants.TYPE_INTEGER) || range.equals(UIMAConstants.TYPE_LONG)
-                    || range.equals(UIMAConstants.TYPE_SHORT) || range
-                      .equals(UIMAConstants.TYPE_BYTE))) {
-      INumberExpression numberExpr = (INumberExpression) value;
-      int v = numberExpr.getIntegerValue(context, this);
-      annotation.setIntValue(feature, v);
-    } else if (value instanceof INumberExpression && (range.equals(UIMAConstants.TYPE_DOUBLE))) {
-      INumberExpression numberExpr = (INumberExpression) value;
-      double v = numberExpr.getDoubleValue(context, this);
-      annotation.setDoubleValue(feature, v);
-    } else if (value instanceof INumberExpression && (range.equals(UIMAConstants.TYPE_FLOAT))) {
-      INumberExpression numberExpr = (INumberExpression) value;
-      float v = numberExpr.getFloatValue(context, this);
-      annotation.setFloatValue(feature, v);
-    } else if (value instanceof IBooleanExpression && (range.equals(UIMAConstants.TYPE_BOOLEAN))) {
-      IBooleanExpression booleanExpr = (IBooleanExpression) value;
-      boolean v = booleanExpr.getBooleanValue(context, this);
-      annotation.setBooleanValue(feature, v);
-    } else if (value instanceof IBooleanExpression && (range.equals(UIMAConstants.TYPE_BOOLEAN))) {
-      IBooleanExpression booleanExpr = (IBooleanExpression) value;
-      boolean v = booleanExpr.getBooleanValue(context, this);
-      annotation.setBooleanValue(feature, v);
+    } else if (range.equals(UIMAConstants.TYPE_STRINGARRAY)) {
+      if (value instanceof IStringListExpression) {
+        IStringListExpression stringListExpr = (IStringListExpression) value;
+        List<String> stringList = stringListExpr.getStringList(context, this);
+        StringArrayFS stringArray = FSCollectionFactory.createStringArray(cas, stringList);
+        annotation.setFeatureValue(feature, stringArray);
+      } else if (value instanceof IStringExpression) {
+        IStringExpression stringExpr = (IStringExpression) value;
+        String string = stringExpr.getStringValue(context, this);
+        StringArrayFS array = FSCollectionFactory.createStringArray(cas,
+                new String[] { string });
+        annotation.setFeatureValue(feature, array);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_INTEGER) || range.equals(UIMAConstants.TYPE_LONG)
+            || range.equals(UIMAConstants.TYPE_SHORT) || range.equals(UIMAConstants.TYPE_BYTE)) {
+      if (value instanceof INumberExpression) {
+        INumberExpression numberExpr = (INumberExpression) value;
+        int v = numberExpr.getIntegerValue(context, this);
+        annotation.setIntValue(feature, v);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_INTARRAY)) {
+      if (value instanceof INumberExpression) {
+        INumberExpression numberExpr = (INumberExpression) value;
+        int v = numberExpr.getIntegerValue(context, this);
+        IntArrayFS array = FSCollectionFactory.createIntArray(cas,
+                new int[] { v });
+        annotation.setFeatureValue(feature, array);
+      } else if(value instanceof INumberListExpression) {
+        INumberListExpression expr = (INumberListExpression) value;
+        List<Number> list = expr.getNumberList(context, this);
+        IntArrayFS array = FSCollectionFactory.createIntArray(cas,RutaListUtils.toIntArray(list));
+        annotation.setFeatureValue(feature, array);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_DOUBLE)) {
+      if (value instanceof INumberExpression) {
+        INumberExpression numberExpr = (INumberExpression) value;
+        double v = numberExpr.getDoubleValue(context, this);
+        annotation.setDoubleValue(feature, v);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_DOUBLEARRAY)) {
+      if (value instanceof INumberExpression) {
+        INumberExpression numberExpr = (INumberExpression) value;
+        double v = numberExpr.getDoubleValue(context, this);
+        DoubleArrayFS array = FSCollectionFactory.createDoubleArray(cas,
+                new double[] { v });
+        annotation.setFeatureValue(feature, array);
+      } else if(value instanceof INumberListExpression) {
+        INumberListExpression expr = (INumberListExpression) value;
+        List<Number> list = expr.getNumberList(context, this);
+        DoubleArrayFS array = FSCollectionFactory.createDoubleArray(cas,RutaListUtils.toDoubleArray(list));
+        annotation.setFeatureValue(feature, array);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_FLOAT)) {
+      if (value instanceof INumberExpression) {
+        INumberExpression numberExpr = (INumberExpression) value;
+        float v = numberExpr.getFloatValue(context, this);
+        annotation.setFloatValue(feature, v);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_FLOATARRAY)) {
+      if (value instanceof INumberExpression) {
+        INumberExpression numberExpr = (INumberExpression) value;
+        float v = numberExpr.getFloatValue(context, this);
+        FloatArrayFS array = FSCollectionFactory.createFloatArray(cas,
+                new float[] { v });
+        annotation.setFeatureValue(feature, array);
+      } else if(value instanceof INumberListExpression) {
+        INumberListExpression expr = (INumberListExpression) value;
+        List<Number> list = expr.getNumberList(context, this);
+        FloatArrayFS array = FSCollectionFactory.createFloatArray(cas,RutaListUtils.toFloatArray(list));
+        annotation.setFeatureValue(feature, array);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_BOOLEAN)) {
+      if (value instanceof IBooleanExpression) {
+        IBooleanExpression expr = (IBooleanExpression) value;
+        Boolean v = expr.getBooleanValue(context, this);
+        annotation.setBooleanValue(feature, v);
+      }
+    } else if (range.equals(UIMAConstants.TYPE_BOOLEANARRAY)) {
+      if (value instanceof IBooleanListExpression) {
+        IBooleanListExpression expr = (IBooleanListExpression) value;
+        List<Boolean> list = expr.getBooleanList(context, this);
+        BooleanArrayFS array = FSCollectionFactory.createBooleanArray(cas, list);
+        annotation.setFeatureValue(feature, array);
+      } else if (value instanceof IBooleanExpression) {
+        IBooleanExpression expr = (IBooleanExpression) value;
+        Boolean v = expr.getBooleanValue(context, this);
+        BooleanArrayFS array = FSCollectionFactory.createBooleanArray(cas,
+                new boolean[] { v });
+        annotation.setFeatureValue(feature, array);
+      }
     } else if (value instanceof AnnotationTypeExpression && !feature.getRange().isPrimitive()) {
       AnnotationTypeExpression ate = (AnnotationTypeExpression) value;
       if (feature.getRange().isArray()) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/UIMAConstants.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/UIMAConstants.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/UIMAConstants.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/UIMAConstants.java Tue Jan 12 15:34:07 2016
@@ -41,6 +41,16 @@ public class UIMAConstants {
 
   public static final String TYPE_FSARRAY = "uima.cas.FSArray";
   
+  public static final String TYPE_STRINGARRAY = "uima.cas.StringArray";
+  
+  public static final String TYPE_BOOLEANARRAY = "uima.cas.BooleanArray";
+  
+  public static final String TYPE_INTARRAY = "uima.cas.IntArray";
+  
+  public static final String TYPE_DOUBLEARRAY = "uima.cas.DoubleArray";
+  
+  public static final String TYPE_FLOATARRAY = "uima.cas.FloatArray";
+  
   public static final String FEATURE_COVERED_TEXT = "coveredText";
 
   public static final String FEATURE_COVERED_TEXT_SHORT = "ct";

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=1724261&r1=1724260&r2=1724261&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 Tue Jan 12 15:34:07 2016
@@ -53,11 +53,67 @@ public class ConditionFactory {
     return new NotCondition(cond);
   }
 
+  @SuppressWarnings("rawtypes")
+  public static AbstractRutaCondition createConditionContains(List<IRutaExpression> args,
+          RutaBlock parent) {
+    if (args.size() == 1) {
+      IRutaExpression arg = args.get(0);
+      if (arg instanceof ITypeExpression) {
+        return createConditionContains((ITypeExpression) arg, null, null, null, parent);
+      }
+    } else if (args.size() == 2) {
+      IRutaExpression arg1 = args.get(0);
+      IRutaExpression arg2 = args.get(1);
+      if (arg1 instanceof ListExpression) {
+        return createConditionContains((ListExpression) arg1, arg2, null, null, null, parent);
+      }
+    } else if (args.size() == 3) {
+      IRutaExpression arg1 = args.get(0);
+      IRutaExpression arg2 = args.get(1);
+      IRutaExpression arg3 = args.get(2);
+      if (arg1 instanceof ITypeExpression && arg2 instanceof INumberExpression
+              && arg3 instanceof INumberExpression) {
+        return createConditionContains((ITypeExpression) arg1, (INumberExpression) arg2,
+                (INumberExpression) arg3, null, parent);
+      }
+    } else if (args.size() == 4) {
+      IRutaExpression arg1 = args.get(0);
+      IRutaExpression arg2 = args.get(1);
+      IRutaExpression arg3 = args.get(2);
+      IRutaExpression arg4 = args.get(3);
+      if (arg1 instanceof ITypeExpression && arg2 instanceof INumberExpression
+              && arg3 instanceof INumberExpression && arg4 instanceof IBooleanExpression) {
+        return createConditionContains((ITypeExpression) arg1, (INumberExpression) arg2,
+                (INumberExpression) arg3, (IBooleanExpression) arg4, parent);
+      }
+    } else if (args.size() == 5) {
+      IRutaExpression arg1 = args.get(0);
+      IRutaExpression arg2 = args.get(1);
+      IRutaExpression arg3 = args.get(2);
+      IRutaExpression arg4 = args.get(3);
+      IRutaExpression arg5 = args.get(3);
+      if (arg1 instanceof ListExpression && arg3 instanceof INumberExpression
+              && arg4 instanceof INumberExpression && arg5 instanceof IBooleanExpression) {
+        return createConditionContains((ListExpression) arg1, arg2, (INumberExpression) arg3,
+                (INumberExpression) arg4, (IBooleanExpression) arg5, parent);
+      }
+    }
+
+    return null;
+  }
+
   public static AbstractRutaCondition createConditionContains(ITypeExpression typeExpr,
           INumberExpression min, INumberExpression max, IBooleanExpression percent, RutaBlock parent) {
     return new ContainsCondition(typeExpr, min, max, percent);
   }
 
+  @SuppressWarnings("rawtypes")
+  public static AbstractRutaCondition createConditionContains(ListExpression list,
+          IRutaExpression a, INumberExpression min, INumberExpression max,
+          IBooleanExpression percent, RutaBlock env) {
+    return new ContainsCondition(list, a, min, max, percent);
+  }
+
   public static AbstractRutaCondition createConditionContextCount(ITypeExpression typeExpr,
           INumberExpression min, INumberExpression max, Token var, RutaBlock parent) {
     String varString = null;
@@ -247,13 +303,6 @@ public class ConditionFactory {
     return new CountCondition(type, a, min, max, var == null ? null : var.getText());
   }
 
-  @SuppressWarnings("rawtypes")
-  public static AbstractRutaCondition createConditionContains(ListExpression list,
-          IRutaExpression a, INumberExpression min, INumberExpression max,
-          IBooleanExpression percent, RutaBlock env) {
-    return new ContainsCondition(list, a, min, max, percent);
-  }
-
   public static AbstractRutaCondition createImplicitCondition(IRutaExpression expr) {
     return new ImplicitCondition(expr);
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java Tue Jan 12 15:34:07 2016
@@ -26,17 +26,19 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.IRutaExpression;
-import org.apache.uima.ruta.expression.bool.AbstractBooleanListExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationListExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
+import org.apache.uima.ruta.expression.bool.IBooleanListExpression;
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;
 import org.apache.uima.ruta.expression.list.ListExpression;
-import org.apache.uima.ruta.expression.number.AbstractNumberListExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.expression.number.INumberListExpression;
 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;
-import org.apache.uima.ruta.expression.string.AbstractStringListExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
-import org.apache.uima.ruta.expression.type.AbstractTypeListExpression;
+import org.apache.uima.ruta.expression.string.IStringListExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.expression.type.ITypeListExpression;
 import org.apache.uima.ruta.rule.EvaluatedCondition;
 import org.apache.uima.ruta.rule.MatchContext;
 import org.apache.uima.ruta.type.RutaBasic;
@@ -97,36 +99,49 @@ public class ContainsCondition extends T
         }
       }
     } else {
-      totalCount = argList.getList(context, stream).size();
-      if (arg instanceof IBooleanExpression && argList instanceof AbstractBooleanListExpression) {
+      List<?> list = argList.getList(context, stream);
+      totalCount = list.size();
+      Object sniff = null;
+      if(totalCount >0 ) {
+        sniff = list.get(0);
+      }
+      if (check(sniff, Boolean.class) && arg instanceof IBooleanExpression && argList instanceof IBooleanListExpression) {
         IBooleanExpression e = (IBooleanExpression) arg;
-        AbstractBooleanListExpression le = (AbstractBooleanListExpression) argList;
+        IBooleanListExpression le = (IBooleanListExpression) argList;
         boolean v = e.getBooleanValue(context, stream);
-        List<Boolean> l = new ArrayList<Boolean>(le.getList(context, stream));
+        List<Boolean> l = new ArrayList<Boolean>(le.getBooleanList(context, stream));
         while (l.remove(v)) {
           basicCount++;
         }
-      } else if (arg instanceof INumberExpression && argList instanceof AbstractNumberListExpression) {
+      } else if (check(sniff, Number.class) &&arg instanceof INumberExpression && argList instanceof INumberListExpression) {
         INumberExpression e = (INumberExpression) arg;
-        AbstractNumberListExpression le = (AbstractNumberListExpression) argList;
+        INumberListExpression le = (INumberListExpression) argList;
         Number v = e.getDoubleValue(context, stream);
-        List<Number> l = new ArrayList<Number>(le.getList(context, stream));
+        List<Number> l = new ArrayList<Number>(le.getNumberList(context, stream));
         while (l.remove(v)) {
           basicCount++;
         }
-      } else if (arg instanceof IStringExpression && argList instanceof AbstractStringListExpression) {
+      } else if (check(sniff, String.class) &&arg instanceof IStringExpression && argList instanceof IStringListExpression) {
         IStringExpression e = (IStringExpression) arg;
-        AbstractStringListExpression le = (AbstractStringListExpression) argList;
+        IStringListExpression le = (IStringListExpression) argList;
         String v = e.getStringValue(context, stream);
-        List<String> l = new ArrayList<String>(le.getList(context, stream));
+        List<String> l = new ArrayList<String>(le.getStringList(context, stream));
         while (l.remove(v)) {
           basicCount++;
         }
-      } else if (arg instanceof ITypeExpression && argList instanceof AbstractTypeListExpression) {
+      } else if (check(sniff, Type.class) &&arg instanceof ITypeExpression && argList instanceof ITypeListExpression) {
         ITypeExpression e = (ITypeExpression) arg;
-        AbstractTypeListExpression le = (AbstractTypeListExpression) argList;
+        ITypeListExpression le = (ITypeListExpression) argList;
         Type v = e.getType(context, stream);
-        List<Type> l = new ArrayList<Type>(le.getList(context, stream));
+        List<Type> l = new ArrayList<Type>(le.getTypeList(context, stream));
+        while (l.remove(v)) {
+          basicCount++;
+        }
+      } else if (check(sniff, AnnotationFS.class) &&arg instanceof IAnnotationExpression && argList instanceof IAnnotationListExpression) {
+        IAnnotationExpression e = (IAnnotationExpression) arg;
+        IAnnotationListExpression le = (IAnnotationListExpression) argList;
+        AnnotationFS v = e.getAnnotation(context, stream);
+        List<AnnotationFS> l = new ArrayList<AnnotationFS>(le.getAnnotationList(context, stream));
         while (l.remove(v)) {
           basicCount++;
         }
@@ -148,6 +163,15 @@ public class ContainsCondition extends T
     }
   }
 
+  private boolean check(Object sniff, Class<?> clazz) {
+    if(sniff == null) {
+      return true;
+    } else if(clazz.isAssignableFrom(sniff.getClass())){
+      return true;
+    }
+    return false;
+  }
+
   public INumberExpression getMin() {
     return min;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java Tue Jan 12 15:34:07 2016
@@ -53,7 +53,7 @@ public class BooleanListFeatureExpressio
     AnnotationFS annotation = context.getAnnotation();
     Type type = fe.getTypeExpr(context, stream).getType(context, stream);
     Feature feature = fe.getFeature(context, stream);
-    if(feature == null || !feature.getRange().isArray() || !StringUtils.equals(feature.getRange().getName(), UIMAConstants.TYPE_BOOLEAN)) {
+    if(feature == null || !feature.getRange().isArray() || !StringUtils.equals(feature.getRange().getName(), UIMAConstants.TYPE_BOOLEANARRAY)) {
       // throw runtime exception?
       return Collections.emptyList();
     }

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=1724261&r1=1724260&r2=1724261&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 Tue Jan 12 15:34:07 2016
@@ -27,7 +27,6 @@ import org.apache.commons.lang3.StringUt
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.jcas.cas.FSArray;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.UIMAConstants;
 import org.apache.uima.ruta.expression.ExpressionFactory;
@@ -43,7 +42,8 @@ import org.apache.uima.ruta.expression.s
 import org.apache.uima.ruta.rule.MatchContext;
 
 public class GenericFeatureExpression extends ListExpression<Object> implements INumberExpression,
-        IBooleanExpression, IStringExpression, IAnnotationExpression, IAnnotationListExpression, IBooleanListExpression, INumberListExpression, IStringListExpression {
+        IBooleanExpression, IStringExpression, IAnnotationExpression, IAnnotationListExpression,
+        IBooleanListExpression, INumberListExpression, IStringListExpression {
 
   private FeatureExpression featureExpression;
 
@@ -52,7 +52,7 @@ public class GenericFeatureExpression ex
   private IStringExpression stringExpression;
 
   private IBooleanExpression booleanExpression;
-  
+
   private IAnnotationExpression annotationExpression;
 
   private INumberListExpression numberListExpression;
@@ -60,9 +60,9 @@ public class GenericFeatureExpression ex
   private IStringListExpression stringListExpression;
 
   private IBooleanListExpression booleanListExpression;
-  
+
   private IAnnotationListExpression annotationListExpression;
-  
+
   public GenericFeatureExpression(FeatureExpression fe) {
     super();
     this.featureExpression = fe;
@@ -143,7 +143,8 @@ public class GenericFeatureExpression ex
   @Override
   public List<Boolean> getBooleanList(MatchContext context, RutaStream stream) {
     if (booleanListExpression == null) {
-      booleanListExpression = ExpressionFactory.createBooleanListFeatureExpression(featureExpression);
+      booleanListExpression = ExpressionFactory
+              .createBooleanListFeatureExpression(featureExpression);
     }
     return booleanListExpression.getBooleanList(context, stream);
   }
@@ -151,28 +152,32 @@ public class GenericFeatureExpression ex
   @Override
   public List<AnnotationFS> getAnnotationList(MatchContext context, RutaStream stream) {
     if (annotationListExpression == null) {
-      annotationListExpression = ExpressionFactory.createAnnotationListFeatureExpression(featureExpression);
+      annotationListExpression = ExpressionFactory
+              .createAnnotationListFeatureExpression(featureExpression);
     }
     return annotationListExpression.getAnnotationList(context, stream);
   }
-  
-  
 
   @Override
   public List<Object> getList(MatchContext context, RutaStream stream) {
-    System.out.println();
     Feature feature = featureExpression.getFeature(context, stream);
     Type range = feature.getRange();
-    if(!range.isArray()) {
+    if (!range.isArray()) {
       return Collections.emptyList();
     }
     List<Object> result = new ArrayList<Object>();
-    if(StringUtils.equals(range.getName(), UIMAConstants.TYPE_FSARRAY)) {
+    if (StringUtils.equals(range.getName(), UIMAConstants.TYPE_FSARRAY)) {
       result.addAll(getAnnotationList(context, stream));
+    } else if (StringUtils.equals(range.getName(), UIMAConstants.TYPE_BOOLEANARRAY)) {
+      result.addAll(getBooleanList(context, stream));
+    } else if (StringUtils.equals(range.getName(), UIMAConstants.TYPE_STRINGARRAY)) {
+      result.addAll(getStringList(context, stream));
+    } else if (StringUtils.equals(range.getName(), UIMAConstants.TYPE_INTARRAY)
+            || StringUtils.equals(range.getName(), UIMAConstants.TYPE_DOUBLEARRAY)
+            || StringUtils.equals(range.getName(), UIMAConstants.TYPE_FLOATARRAY)) {
+      result.addAll(getNumberList(context, stream));
     }
     return result;
   }
 
-  
-
 }

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=1724261&r1=1724260&r2=1724261&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 Tue Jan 12 15:34:07 2016
@@ -257,8 +257,10 @@ public class SimpleFeatureExpression ext
         }
       }
     } else if (value != null) {
-      throw new IllegalArgumentException(value.getType()
-              + " is not supported in a feature match expression (" + mr.getMatch() + ").");
+      result.add(annotation);
+      // primitive? -> return last annotation for further processing
+//      throw new IllegalArgumentException(value.getType()
+//              + " is not supported in a feature match expression (" + mr.getMatch() + ").");
     }
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java Tue Jan 12 15:34:07 2016
@@ -49,13 +49,13 @@ public class NumberListFeatureExpression
     super();
     this.fe = fe;
   }
-  
+
   @Override
   public List<Number> getList(MatchContext context, RutaStream stream) {
     AnnotationFS annotation = context.getAnnotation();
     Type type = fe.getTypeExpr(context, stream).getType(context, stream);
     Feature feature = fe.getFeature(context, stream);
-    if(feature == null || !feature.getRange().isArray() || !StringUtils.equals(feature.getRange().getName(), UIMAConstants.TYPE_BOOLEAN)) {
+    if (feature == null || !feature.getRange().isArray() || !validType(feature)) {
       // throw runtime exception?
       return Collections.emptyList();
     }
@@ -66,19 +66,19 @@ public class NumberListFeatureExpression
 
     for (AnnotationFS each : featureAnnotations) {
       FeatureStructure featureValue = each.getFeatureValue(feature);
-      if(featureValue instanceof IntArrayFS) {
+      if (featureValue instanceof IntArrayFS) {
         IntArrayFS array = (IntArrayFS) featureValue;
         for (int i = 0; i < array.size(); i++) {
           Integer b = array.get(i);
           result.add(b);
         }
-      } else if(featureValue instanceof DoubleArrayFS) {
+      } else if (featureValue instanceof DoubleArrayFS) {
         DoubleArrayFS array = (DoubleArrayFS) featureValue;
         for (int i = 0; i < array.size(); i++) {
           Double b = array.get(i);
           result.add(b);
         }
-      } else if(featureValue instanceof FloatArrayFS) {
+      } else if (featureValue instanceof FloatArrayFS) {
         FloatArrayFS array = (FloatArrayFS) featureValue;
         for (int i = 0; i < array.size(); i++) {
           Float b = array.get(i);
@@ -86,10 +86,17 @@ public class NumberListFeatureExpression
         }
       }
     }
-    
+
     return result;
   }
 
+  private boolean validType(Feature feature) {
+    String name = feature.getRange().getName();
+    return StringUtils.equals(name, UIMAConstants.TYPE_INTARRAY)
+            || StringUtils.equals(name, UIMAConstants.TYPE_DOUBLEARRAY)
+            || StringUtils.equals(name, UIMAConstants.TYPE_FLOATARRAY);
+  }
+
   public FeatureExpression getFeatureExpression() {
     return fe;
   }
@@ -98,9 +105,4 @@ public class NumberListFeatureExpression
     this.fe = fe;
   }
 
-
-
-  
-  
-
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringListExpression.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/AbstractStringListExpression.java Tue Jan 12 15:34:07 2016
@@ -29,6 +29,6 @@ public abstract class AbstractStringList
   
   @Override
   public List<String> getStringList(MatchContext context, RutaStream stream) {
-    return getStringList(context, stream);
+    return getList(context, stream);
   }
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java Tue Jan 12 15:34:07 2016
@@ -53,7 +53,7 @@ public class StringListFeatureExpression
     AnnotationFS annotation = context.getAnnotation();
     Type type = fe.getTypeExpr(context, stream).getType(context, stream);
     Feature feature = fe.getFeature(context, stream);
-    if(feature == null || !feature.getRange().isArray() || !StringUtils.equals(feature.getRange().getName(), UIMAConstants.TYPE_BOOLEAN)) {
+    if(feature == null || !feature.getRange().isArray() || !StringUtils.equals(feature.getRange().getName(), UIMAConstants.TYPE_STRINGARRAY)) {
       // throw runtime exception?
       return Collections.emptyList();
     }

Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/utils/RutaListUtils.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/utils/RutaListUtils.java?rev=1724261&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/utils/RutaListUtils.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/utils/RutaListUtils.java Tue Jan 12 15:34:07 2016
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.utils;
+
+import java.util.List;
+
+public class RutaListUtils {
+
+  public static int[] toIntArray(List<Number> list) {
+    int[] result = new int[list.size()];
+    int index = 0;
+    for (Number number : list) {
+      result[index] = number.intValue();
+      index++;
+    }
+    return result;
+  }
+  
+  public static double[] toDoubleArray(List<Number> list) {
+    double[] result = new double[list.size()];
+    int index = 0;
+    for (Number number : list) {
+      result[index] = number.doubleValue();
+      index++;
+    }
+    return result;
+  }
+  
+  public static float[] toFloatArray(List<Number> list) {
+    float[] result = new float[list.size()];
+    int index = 0;
+    for (Number number : list) {
+      result[index] = number.floatValue();
+      index++;
+    }
+    return result;
+  }
+  
+}

Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/utils/RutaListUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

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=1724261&r1=1724260&r2=1724261&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 Tue Jan 12 15:34:07 2016
@@ -115,4 +115,36 @@ public class AnnotationFeatureExpression
     RutaTestUtils.assertAnnotationsEquals(cas, 4, 1, "text");
   }
   
+  @Test
+  public void testStringArray() {
+    String document = "Some text.";
+    String script = "";
+    script += "W{-> CREATE(Struct, \"as\"={\"text\"})};\n";
+    script += "Struct{CONTAINS(Struct.as, Struct.ct)-> 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 = "as";
+    list.add(new TestFeature(fn1, "", "uima.cas.StringArray"));
+    list = new ArrayList<RutaTestUtils.TestFeature>();
+
+
+    CAS cas = null;
+    try {
+      cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+      Ruta.apply(cas, script);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "text");
+
+  }
+  
 }

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java Tue Jan 12 15:34:07 2016
@@ -36,6 +36,7 @@ import org.apache.uima.cas.text.Annotati
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class AnnotationLabelExpressionTest {
@@ -249,4 +250,35 @@ public class AnnotationLabelExpressionTe
     assertEquals("Some", a.getCoveredText());
 
   }
+
+  @Test
+  @Ignore
+  public void testInsideOut() {
+    String document = "Some text.";
+    String script = "(a:W{-PARTOF(Struct) -> CREATE(Struct, \"a\"=a, \"c\"=a)})+;";
+    script += "Struct.a{-> T1};";
+    script += "Struct{SIZE(Struct.c,1,1)-> T3};";
+
+    Map<String, String> typeMap = new TreeMap<String, String>();
+    String typeName = "Struct";
+    typeMap.put(typeName, "uima.tcas.Annotation");
+
+    Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+    List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+    featureMap.put(typeName, list);
+    list.add(new TestFeature("a", "", "uima.tcas.Annotation"));
+    list.add(new TestFeature("c", "", "uima.cas.FSArray"));
+
+    CAS cas = null;
+    try {
+      cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+      Ruta.apply(cas, script);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "Some", "text");
+    RutaTestUtils.assertAnnotationsEquals(cas, 3, 2, "Some", "text");
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java Tue Jan 12 15:34:07 2016
@@ -65,10 +65,6 @@ import org.apache.uima.ruta.expression.I
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;
 import org.apache.uima.ruta.expression.list.ListExpression;
-import org.apache.uima.ruta.expression.list.SimpleStringListExpression;
-import org.apache.uima.ruta.expression.list.SimpleTypeListExpression;
-import org.apache.uima.ruta.expression.list.StringListExpression;
-import org.apache.uima.ruta.expression.list.TypeListExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.number.NumberVariableExpression;
 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;
@@ -77,10 +73,14 @@ import org.apache.uima.ruta.expression.r
 import org.apache.uima.ruta.expression.resource.WordListExpression;
 import org.apache.uima.ruta.expression.resource.WordTableExpression;
 import org.apache.uima.ruta.expression.string.AbstractStringExpression;
+import org.apache.uima.ruta.expression.string.AbstractStringListExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.expression.string.SimpleStringExpression;
+import org.apache.uima.ruta.expression.string.SimpleStringListExpression;
+import org.apache.uima.ruta.expression.type.AbstractTypeListExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;
+import org.apache.uima.ruta.expression.type.SimpleTypeListExpression;
 import org.apache.uima.ruta.expression.type.TypeVariableExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
 import org.junit.Test;
@@ -108,8 +108,8 @@ public class ActionVerbalizerTest {
     exprList.add(typeExpr1);
     WordTableExpression wordTableExpr = new ReferenceWordTableExpression(var);
     WordListExpression wordListExpr = new ReferenceWordListExpression(var);
-    TypeListExpression typeListExpr = new SimpleTypeListExpression(typeExprList);
-    StringListExpression stringListExpr = new SimpleStringListExpression(stringExprList);
+    AbstractTypeListExpression typeListExpr = new SimpleTypeListExpression(typeExprList);
+    AbstractStringListExpression stringListExpr = new SimpleStringListExpression(stringExprList);
     Map<IStringExpression, IRutaExpression> stringExprMap = new HashMap<IStringExpression, IRutaExpression>();
     Map<IStringExpression, INumberExpression> stringExprNumExprMap = new HashMap<IStringExpression, INumberExpression>();
     Map<IStringExpression, IRutaExpression> stringExprTypeExprMap = new HashMap<IStringExpression, IRutaExpression>();

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java Tue Jan 12 15:34:07 2016
@@ -54,17 +54,17 @@ import org.apache.uima.ruta.condition.To
 import org.apache.uima.ruta.condition.VoteCondition;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;
-import org.apache.uima.ruta.expression.list.SimpleStringListExpression;
-import org.apache.uima.ruta.expression.list.SimpleTypeListExpression;
-import org.apache.uima.ruta.expression.list.StringListExpression;
-import org.apache.uima.ruta.expression.list.TypeListExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.number.NumberVariableExpression;
 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;
+import org.apache.uima.ruta.expression.string.AbstractStringListExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.expression.string.SimpleStringExpression;
+import org.apache.uima.ruta.expression.string.SimpleStringListExpression;
+import org.apache.uima.ruta.expression.type.AbstractTypeListExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;
+import org.apache.uima.ruta.expression.type.SimpleTypeListExpression;
 import org.apache.uima.ruta.expression.type.TypeVariableExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
 import org.junit.Test;
@@ -87,8 +87,8 @@ public class ConditionVerbalizerTest {
     IBooleanExpression boolExpr1 = new SimpleBooleanExpression(true);
     IStringExpression stringExpr = new SimpleStringExpression("string");
     stringExprList.add(stringExpr);
-    TypeListExpression typeListExpr = new SimpleTypeListExpression(typeExprList);
-    StringListExpression stringListExpr = new SimpleStringListExpression(stringExprList);
+    AbstractTypeListExpression typeListExpr = new SimpleTypeListExpression(typeExprList);
+    AbstractStringListExpression stringListExpr = new SimpleStringListExpression(stringExprList);
     AbstractRutaCondition c = null;
     String s = null;
 

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java?rev=1724261&r1=1724260&r2=1724261&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java Tue Jan 12 15:34:07 2016
@@ -24,34 +24,34 @@ import static org.junit.Assert.assertEqu
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.uima.ruta.expression.bool.AbstractBooleanListExpression;
+import org.apache.uima.ruta.expression.bool.BooleanListVariableExpression;
 import org.apache.uima.ruta.expression.bool.BooleanNumberExpression;
 import org.apache.uima.ruta.expression.bool.BooleanTypeExpression;
 import org.apache.uima.ruta.expression.bool.BooleanVariableExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;
-import org.apache.uima.ruta.expression.list.BooleanListExpression;
-import org.apache.uima.ruta.expression.list.BooleanListVariableExpression;
-import org.apache.uima.ruta.expression.list.NumberListExpression;
-import org.apache.uima.ruta.expression.list.NumberListVariableExpression;
-import org.apache.uima.ruta.expression.list.SimpleBooleanListExpression;
-import org.apache.uima.ruta.expression.list.SimpleNumberListExpression;
-import org.apache.uima.ruta.expression.list.SimpleStringListExpression;
-import org.apache.uima.ruta.expression.list.SimpleTypeListExpression;
-import org.apache.uima.ruta.expression.list.StringListExpression;
-import org.apache.uima.ruta.expression.list.StringListVariableExpression;
-import org.apache.uima.ruta.expression.list.TypeListExpression;
-import org.apache.uima.ruta.expression.list.TypeListVariableExpression;
+import org.apache.uima.ruta.expression.bool.SimpleBooleanListExpression;
+import org.apache.uima.ruta.expression.number.AbstractNumberListExpression;
 import org.apache.uima.ruta.expression.number.ComposedNumberExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.expression.number.NumberListVariableExpression;
 import org.apache.uima.ruta.expression.number.NumberVariableExpression;
 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;
+import org.apache.uima.ruta.expression.number.SimpleNumberListExpression;
 import org.apache.uima.ruta.expression.string.AbstractStringExpression;
+import org.apache.uima.ruta.expression.string.AbstractStringListExpression;
 import org.apache.uima.ruta.expression.string.ComposedStringExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.expression.string.SimpleStringExpression;
+import org.apache.uima.ruta.expression.string.SimpleStringListExpression;
+import org.apache.uima.ruta.expression.string.StringListVariableExpression;
 import org.apache.uima.ruta.expression.string.StringVariableExpression;
+import org.apache.uima.ruta.expression.type.AbstractTypeListExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;
+import org.apache.uima.ruta.expression.type.SimpleTypeListExpression;
+import org.apache.uima.ruta.expression.type.TypeListVariableExpression;
 import org.apache.uima.ruta.expression.type.TypeVariableExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
 import org.junit.Test;
@@ -179,8 +179,8 @@ public class ExpressionVerbalizerTest {
     s = v.verbalize(stringExpr3);
     assertEquals("\"string\" + anyVar", s);
 
-    StringListExpression sle1 = new SimpleStringListExpression(stringExprList);
-    StringListExpression sle2 = new StringListVariableExpression(var);
+    AbstractStringListExpression sle1 = new SimpleStringListExpression(stringExprList);
+    AbstractStringListExpression sle2 = new StringListVariableExpression(var);
     s = v.verbalize(sle1);
     assertEquals("{\"string\", anyVar}", s);
     s = v.verbalize(sle2);
@@ -189,8 +189,8 @@ public class ExpressionVerbalizerTest {
     List<IBooleanExpression> boolExprList = new ArrayList<IBooleanExpression>();
     boolExprList.add(boolExpr1);
     boolExprList.add(boolExpr3);
-    BooleanListExpression ble1 = new SimpleBooleanListExpression(boolExprList);
-    BooleanListExpression ble2 = new BooleanListVariableExpression(var);
+    AbstractBooleanListExpression ble1 = new SimpleBooleanListExpression(boolExprList);
+    AbstractBooleanListExpression ble2 = new BooleanListVariableExpression(var);
     s = v.verbalize(ble1);
     assertEquals("{true, anyVar}", s);
     s = v.verbalize(ble2);
@@ -199,8 +199,8 @@ public class ExpressionVerbalizerTest {
     List<INumberExpression> numExprList = new ArrayList<INumberExpression>();
     numExprList.add(numExpr1);
     numExprList.add(numExpr3);
-    NumberListExpression nle1 = new SimpleNumberListExpression(numExprList);
-    NumberListExpression nle2 = new NumberListVariableExpression(var);
+    AbstractNumberListExpression nle1 = new SimpleNumberListExpression(numExprList);
+    AbstractNumberListExpression nle2 = new NumberListVariableExpression(var);
     s = v.verbalize(nle1);
     assertEquals("{4, 4.9}", s);
     s = v.verbalize(nle2);
@@ -209,8 +209,8 @@ public class ExpressionVerbalizerTest {
     List<ITypeExpression> typeExprList = new ArrayList<ITypeExpression>();
     typeExprList.add(typeExpr1);
     typeExprList.add(typeExpr2);
-    TypeListExpression tle1 = new SimpleTypeListExpression(typeExprList);
-    TypeListExpression tle2 = new TypeListVariableExpression(var);
+    AbstractTypeListExpression tle1 = new SimpleTypeListExpression(typeExprList);
+    AbstractTypeListExpression tle2 = new TypeListVariableExpression(var);
     s = v.verbalize(tle1);
     assertEquals("{Type1, typeVar}", s);
     s = v.verbalize(tle2);