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 2020/03/21 21:48:27 UTC

svn commit: r1875502 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/action/ main/java/org/apache/uima/ruta/expression/annotation/ main/java/org/apache/uima/ruta/expression/bool/ main/java/org/apache/uima/ruta/expression/feature/ ma...

Author: pkluegl
Date: Sat Mar 21 21:48:27 2020
New Revision: 1875502

URL: http://svn.apache.org/viewvc?rev=1875502&view=rev
Log:
UIMA-6193: enable AddAction to add expressions, extend ListExpression for optional raw expressions

Added:
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java
Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListLabelExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanListExpression.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/bool/BooleanListVariableExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanListExpression.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/list/ListExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.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/number/NumberListVariableExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberListExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringListExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListVariableExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeListExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java Sat Mar 21 21:48:27 2020
@@ -68,23 +68,25 @@ public class AddAction extends AbstractR
     Class<?> vgtype = environment.getVariableGenericType(var);
     for (IRutaExpression each : elements) {
       if (vgtype.equals(Boolean.class) && each instanceof IBooleanExpression) {
-        list.add(((IBooleanExpression) each).getBooleanValue(context, stream));
+        list.add(each);
       } else if (vgtype.equals(Integer.class) && each instanceof INumberExpression) {
-        list.add(((INumberExpression) each).getIntegerValue(context, stream));
+        list.add(each);
       } else if (vgtype.equals(Double.class) && each instanceof INumberExpression) {
-        list.add(((INumberExpression) each).getDoubleValue(context, stream));
+        list.add(each);
+      } else if (vgtype.equals(Float.class) && each instanceof INumberExpression) {
+        list.add(each);
       } else if (vgtype.equals(Type.class) && each instanceof ITypeExpression) {
-        list.add(((ITypeExpression) each).getType(context, stream));
+        list.add(each);
       } else if (vgtype.equals(String.class) && each instanceof IStringExpression) {
-        list.add(((IStringExpression) each).getStringValue(context, stream));
+        list.add(each);
       } else if (vgtype.equals(AnnotationFS.class) && each instanceof IAnnotationExpression) {
-        AnnotationFS annotation = ((IAnnotationExpression) each).getAnnotation(context, stream);
-        if(annotation != null) {
-          list.add(annotation);
-        }
+        list.add(each);
       } else if (each instanceof ListExpression) {
-        ListExpression l = (ListExpression) each;
-        list.addAll(l.getList(context, stream));
+        ListExpression listExpression = (ListExpression) each;
+        List rawList = listExpression.getRawList(context, stream);
+        if (rawList != null) {
+          list.addAll(rawList);
+        }
       }
     }
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java Sat Mar 21 21:48:27 2020
@@ -50,4 +50,9 @@ public class AnnotationListDelegateVaria
     return null;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java Sat Mar 21 21:48:27 2020
@@ -40,7 +40,7 @@ public class AnnotationListFeatureExpres
     super();
     this.fe = fe;
   }
-  
+
   @Override
   public List<AnnotationFS> getList(MatchContext context, RutaStream stream) {
     AnnotationFS annotation = context.getAnnotation();
@@ -58,9 +58,9 @@ public class AnnotationListFeatureExpres
     this.fe = fe;
   }
 
-
-
-  
-  
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListLabelExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListLabelExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListLabelExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListLabelExpression.java Sat Mar 21 21:48:27 2020
@@ -31,24 +31,26 @@ import org.apache.uima.ruta.rule.MatchCo
  */
 public class AnnotationListLabelExpression extends AbstractAnnotationListExpression {
 
-private String label;
-  
+  private String label;
+
   public AnnotationListLabelExpression(String label) {
     super();
     this.label = label;
   }
- 
+
   @SuppressWarnings("unchecked")
   @Override
   public List<AnnotationFS> getList(MatchContext context, RutaStream stream) {
     return context.getParent().getEnvironment().getVariableValue(label, List.class, stream);
   }
-  
+
   public String getLabel() {
     return label;
   }
 
-
- 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java Sat Mar 21 21:48:27 2020
@@ -19,6 +19,7 @@
 
 package org.apache.uima.ruta.expression.annotation;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.uima.cas.text.AnnotationFS;
@@ -35,13 +36,25 @@ public class AnnotationListVariableExpre
     this.var = var;
   }
 
-  
   @Override
   public List<AnnotationFS> getList(MatchContext context, RutaStream stream) {
+    List<?> list = getRawList(context, stream);
+    List<AnnotationFS> result = new ArrayList<>();
+    for (Object each : list) {
+      if (each instanceof IAnnotationExpression) {
+        result.add(((IAnnotationExpression) each).getAnnotation(context, stream));
+      }
+      if (each instanceof AnnotationFS) {
+        result.add((AnnotationFS) each);
+      }
+    }
+    return result;
+  }
+
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
     RutaBlock parent = context.getParent();
-    @SuppressWarnings("unchecked")
-    List<AnnotationFS> list = parent.getEnvironment().getVariableValue(var, List.class, stream);
-    return list;
+    return parent.getEnvironment().getVariableValue(var, List.class, stream);
   }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanListExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/AbstractBooleanListExpression.java Sat Mar 21 21:48:27 2020
@@ -25,8 +25,9 @@ import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.list.ListExpression;
 import org.apache.uima.ruta.rule.MatchContext;
 
-public abstract class AbstractBooleanListExpression extends ListExpression<Boolean> implements IBooleanListExpression{
-  
+public abstract class AbstractBooleanListExpression extends ListExpression<Boolean>
+        implements IBooleanListExpression {
+
   @Override
   public List<Boolean> getBooleanList(MatchContext context, RutaStream stream) {
     return getList(context, stream);

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=1875502&r1=1875501&r2=1875502&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 Sat Mar 21 21:48:27 2020
@@ -95,4 +95,9 @@ public class BooleanListFeatureExpressio
     this.fe = fe;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListVariableExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListVariableExpression.java Sat Mar 21 21:48:27 2020
@@ -35,11 +35,9 @@ public class BooleanListVariableExpressi
     this.var = var;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public List<Boolean> getList(MatchContext context, RutaStream stream) {
-    RutaBlock parent = context.getParent();
-    List<Object> list = parent.getEnvironment().getVariableValue(var, List.class, stream);
+    List<?> list = getRawList(context, stream);
     List<Boolean> result = new ArrayList<Boolean>();
     for (Object each : list) {
       if (each instanceof IBooleanExpression) {
@@ -55,6 +53,10 @@ public class BooleanListVariableExpressi
     return var;
   }
 
-  
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    RutaBlock parent = context.getParent();
+    return parent.getEnvironment().getVariableValue(var, List.class, stream);
+  }
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanListExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/SimpleBooleanListExpression.java Sat Mar 21 21:48:27 2020
@@ -47,4 +47,10 @@ public class SimpleBooleanListExpression
     return list;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+
+    return getList();
+  }
+
 }

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=1875502&r1=1875501&r2=1875502&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 Sat Mar 21 21:48:27 2020
@@ -207,4 +207,9 @@ public class GenericFeatureExpression ex
     return result;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
+
 }

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=1875502&r1=1875501&r2=1875502&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 Sat Mar 21 21:48:27 2020
@@ -29,6 +29,13 @@ public abstract class ListExpression<T>
 
   public abstract List<T> getList(MatchContext context, RutaStream stream);
 
+  public abstract List<?> getRawList(MatchContext context, RutaStream stream);
+
+//  @Override
+//  public List<IRutaExpression> getRawList(MatchContext context, RutaStream stream) {
+//    return null;
+//  }
+
   @Override
   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/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=1875502&r1=1875501&r2=1875502&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 Sat Mar 21 21:48:27 2020
@@ -66,4 +66,10 @@ public class UntypedListExpression exten
     return list;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+
+    return list;
+  }
+
 }

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=1875502&r1=1875501&r2=1875502&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 Sat Mar 21 21:48:27 2020
@@ -116,4 +116,9 @@ public class NumberListFeatureExpression
     this.fe = fe;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListVariableExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListVariableExpression.java Sat Mar 21 21:48:27 2020
@@ -35,11 +35,9 @@ public class NumberListVariableExpressio
     this.var = var;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public List<Number> getList(MatchContext context, RutaStream stream) {
-    RutaBlock parent = context.getParent();
-    List<Object> list = parent.getEnvironment().getVariableValue(var, List.class, stream);
+    List<?> list = getRawList(context, stream);
     List<Number> result = new ArrayList<Number>();
     for (Object each : list) {
       if (each instanceof INumberExpression) {
@@ -55,4 +53,11 @@ public class NumberListVariableExpressio
   public String getVar() {
     return var;
   }
+
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    RutaBlock parent = context.getParent();
+    return parent.getEnvironment().getVariableValue(var, List.class, stream);
+
+  }
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberListExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberListExpression.java Sat Mar 21 21:48:27 2020
@@ -47,4 +47,10 @@ public class SimpleNumberListExpression
   public List<INumberExpression> getList() {
     return list;
   }
+
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+
+    return getList();
+  }
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringListExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringListExpression.java Sat Mar 21 21:48:27 2020
@@ -47,4 +47,9 @@ public class SimpleStringListExpression
   public List<IStringExpression> getList() {
     return list;
   }
+
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return getList();
+  }
 }

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=1875502&r1=1875501&r2=1875502&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 Sat Mar 21 21:48:27 2020
@@ -95,4 +95,9 @@ public class StringListFeatureExpression
     this.fe = fe;
   }
 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return null;
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListVariableExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListVariableExpression.java Sat Mar 21 21:48:27 2020
@@ -35,11 +35,9 @@ public class StringListVariableExpressio
     this.var = var;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public List<String> getList(MatchContext context, RutaStream stream) {
-    RutaBlock parent = context.getParent();
-    List<Object> list = parent.getEnvironment().getVariableValue(var, List.class, stream);
+    List<?> list = getRawList(context, stream);
     List<String> result = new ArrayList<String>();
     for (Object each : list) {
       if (each instanceof AbstractStringExpression) {
@@ -56,5 +54,10 @@ public class StringListVariableExpressio
     return var;
   }
 
-  
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    RutaBlock parent = context.getParent();
+    return parent.getEnvironment().getVariableValue(var, List.class, stream);
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeListExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeListExpression.java Sat Mar 21 21:48:27 2020
@@ -47,4 +47,9 @@ public class SimpleTypeListExpression ex
   public List<ITypeExpression> getList() {
     return list;
   }
+
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    return getList();
+  }
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java Sat Mar 21 21:48:27 2020
@@ -36,24 +36,23 @@ public class TypeListVariableExpression
     this.var = var;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public List<Type> getList(MatchContext context, RutaStream stream) {
     RutaBlock parent = context.getParent();
-    List<Object> list = parent.getEnvironment().getVariableValue(var, List.class, stream);
+    List<?> list = getRawList(context, stream);
     List<Type> result = new ArrayList<Type>();
     for (Object each : list) {
       if (each instanceof ITypeExpression) {
         result.add(((ITypeExpression) each).getType(context, stream));
       } else if (each instanceof Type) {
         result.add((Type) each);
-      } else if(each instanceof String) {
+      } else if (each instanceof String) {
         Type type = parent.getEnvironment().getType((String) each);
-        if(type != null) {
+        if (type != null) {
           result.add(type);
         } else {
-          throw new IllegalArgumentException("Not able to resolve type: " + each + 
-                  " in script " +context.getParent().getName());
+          throw new IllegalArgumentException("Not able to resolve type: " + each + " in script "
+                  + context.getParent().getName());
         }
       }
     }
@@ -64,5 +63,10 @@ public class TypeListVariableExpression
     return var;
   }
 
- 
+  @Override
+  public List<?> getRawList(MatchContext context, RutaStream stream) {
+    RutaBlock parent = context.getParent();
+    return parent.getEnvironment().getVariableValue(var, List.class, stream);
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java Sat Mar 21 21:48:27 2020
@@ -27,7 +27,7 @@ import org.junit.Test;
 public class AddTest {
 
   @Test
-  public void testAnnotations() {
+  public void testAnnotations() throws Exception {
     String document = "Some text.";
     String script = "";
     script += "ANNOTATION a;";
@@ -38,18 +38,32 @@ public class AddTest {
     script += "Document{SIZE(as,2,2)->T2};";
     script += "as{->T3};";
 
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script);
 
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some text.");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Some text.");
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 2, "Some", "text");
+  }
+
+  @Test
+  public void testVariable() throws Exception {
+    String document = "This is a test.";
+
+    String script = "";
+    script += "STRING s = \"a\";";
+    script += "STRINGLIST sl = {s};";
+    script += "Document{CONTAINS(sl, \"a\") -> T1};";
+    script += "Document{ -> ADD(sl, s)};";
+    script += "Document{ -> s = \"b\"};";
+    script += "Document{CONTAINS(sl, \"a\") -> T2};";
+    script += "Document{CONTAINS(sl, \"b\") -> T3};";
+
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script);
 
-    cas.release();
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "This is a test.");
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+    RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "This is a test.");
   }
 }

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java?rev=1875502&r1=1875501&r2=1875502&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java Sat Mar 21 21:48:27 2020
@@ -33,7 +33,7 @@ import org.junit.Test;
 public class NullExpressionTest {
 
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Some text.";
     String script = "";
     script += "CREATE(A, \"a\" = \"test\", \"b\" = SW), CREATE(B, \"a\" = \"test\", \"b\" = SW);\n";
@@ -46,13 +46,12 @@ public class NullExpressionTest {
     script += "B{FEATURE(\"a\", null)-> T3};";
     script += "B{FEATURE(\"b\", null)-> T4};";
 
-    
     Map<String, String> typeMap = new TreeMap<String, String>();
     String typeName1 = "A";
     typeMap.put(typeName1, "uima.tcas.Annotation");
     String typeName2 = "B";
     typeMap.put(typeName2, "uima.tcas.Annotation");
-    
+
     Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
     List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
     featureMap.put(typeName1, list);
@@ -61,15 +60,9 @@ public class NullExpressionTest {
     list.add(new TestFeature(fn1, "", "uima.cas.String"));
     String fn2 = "b";
     list.add(new TestFeature(fn2, "", "uima.tcas.Annotation"));
-    
-    
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
-      Ruta.apply(cas, script);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+
+    CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+    Ruta.apply(cas, script);
 
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some text.");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Some text.");
@@ -78,6 +71,5 @@ public class NullExpressionTest {
     RutaTestUtils.assertAnnotationsEquals(cas, 5, 1, "Some text.");
     RutaTestUtils.assertAnnotationsEquals(cas, 6, 1, "Some text.");
 
-    cas.release();
   }
 }

Added: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java?rev=1875502&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java (added)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java Sat Mar 21 21:48:27 2020
@@ -0,0 +1,71 @@
+/*
+ * 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.expression;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.ruta.engine.Ruta;
+import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.junit.Test;
+
+public class VariableInitialValueTest {
+
+  @Test
+  public void testStringVariableAsInitialValueOfList() throws Exception {
+    String document = "This is a test.";
+
+    String script = "";
+    script += "STRING s = \"a\";";
+    script += "STRINGLIST sl = {s};";
+    script += "Document{CONTAINS(sl, \"a\") -> T1};";
+    script += "Document{ -> s = \"b\"};";
+    script += "Document{CONTAINS(sl, \"a\") -> T2};";
+    script += "Document{CONTAINS(sl, \"b\") -> T3};";
+
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "This is a test.");
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+    RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "This is a test.");
+
+  }
+
+  @Test
+  public void testIntVariableAsInitialValueOfList() throws Exception {
+    String document = "This is a test.";
+
+    String script = "";
+    script += "INT i = 1;";
+    script += "INTLIST il = {i};";
+    script += "Document{CONTAINS(il, 1) -> T1};";
+    script += "Document{ -> i = 2};";
+    script += "Document{CONTAINS(il, 1) -> T2};";
+    script += "Document{CONTAINS(il, 2) -> T3};";
+
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "This is a test.");
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+    RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "This is a test.");
+
+  }
+
+}