UIMA-4408
- fixed tests
- renamed TypeExpression to AbstractTypeExpression, use ITypeExpression instead

git-svn-id: https://svn.apache.org/repos/asf/uima/ruta/branches/UIMA-4408@1722822 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunction.java b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunction.java
index 1af90d0..fccfae2 100644
--- a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunction.java
+++ b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunction.java
@@ -22,19 +22,19 @@
 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.bool.BooleanFunctionExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 

 public class ExampleBooleanFunction extends BooleanFunctionExpression {

 

-  private final TypeExpression expr;

+  private final ITypeExpression expr;

 

-  public ExampleBooleanFunction(TypeExpression expr) {

+  public ExampleBooleanFunction(ITypeExpression expr) {

     super();

     this.expr = expr;

   }

 

-  public TypeExpression getExpr() {

+  public ITypeExpression getExpr() {

     return expr;

   }

 

diff --git a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunctionExtension.java b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunctionExtension.java
index 3bee2ad..cf4f8a1 100644
--- a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunctionExtension.java
+++ b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBooleanFunctionExtension.java
@@ -23,7 +23,7 @@
 

 import org.apache.uima.ruta.RutaElement;

 import org.apache.uima.ruta.expression.RutaExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.extensions.IRutaBooleanFunctionExtension;

 import org.apache.uima.ruta.extensions.RutaParseException;

 import org.apache.uima.ruta.verbalize.RutaVerbalizer;

@@ -45,11 +45,11 @@
 

   public ExampleBooleanFunction createBooleanFunction(String name, List<RutaExpression> args)

           throws RutaParseException {

-    if (args == null || args.size() != 1 || !(args.get(0) instanceof TypeExpression)) {

+    if (args == null || args.size() != 1 || !(args.get(0) instanceof ITypeExpression)) {

       throw new RutaParseException(

               "ExampleBooleanFunction accepts only one TypeExpression as argument!");

     }

-    return new ExampleBooleanFunction((TypeExpression) args.get(0));

+    return new ExampleBooleanFunction((ITypeExpression) args.get(0));

   }

 

   public String verbalizeName(RutaElement element) {

diff --git a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunction.java b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunction.java
index e85ab82..434cabf 100644
--- a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunction.java
+++ b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunction.java
@@ -19,22 +19,21 @@
 

 package org.apache.uima.ruta.example.extensions;

 

-import org.apache.uima.ruta.RutaBlock;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.NumberFunctionExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 

 public class ExampleNumberFunction extends NumberFunctionExpression {

 

-  private final TypeExpression expr;

+  private final ITypeExpression expr;

 

-  public ExampleNumberFunction(TypeExpression expr) {

+  public ExampleNumberFunction(ITypeExpression expr) {

     super();

     this.expr = expr;

   }

 

-  public TypeExpression getExpr() {

+  public ITypeExpression getExpr() {

     return expr;

   }

 

diff --git a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionExtension.java b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionExtension.java
index 6a55903..9752bdc 100644
--- a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionExtension.java
+++ b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionExtension.java
@@ -24,7 +24,7 @@
 import org.apache.uima.ruta.RutaElement;

 import org.apache.uima.ruta.expression.RutaExpression;

 import org.apache.uima.ruta.expression.number.NumberFunctionExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.extensions.IRutaNumberFunctionExtension;

 import org.apache.uima.ruta.extensions.RutaParseException;

 import org.apache.uima.ruta.verbalize.RutaVerbalizer;

@@ -46,10 +46,10 @@
 

   public NumberFunctionExpression createNumberFunction(String name, List<RutaExpression> args)

           throws RutaParseException {

-    if (args == null || args.size() != 1 || !(args.get(0) instanceof TypeExpression)) {

+    if (args == null || args.size() != 1 || !(args.get(0) instanceof ITypeExpression)) {

       throw new RutaParseException("ExampleNumberFunction accepts only one TypeExpression as argument!");

     }

-    return new ExampleNumberFunction((TypeExpression) args.get(0));

+    return new ExampleNumberFunction((ITypeExpression) args.get(0));

   }

 

   public String verbalizeName(RutaElement element) {

diff --git a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunction.java b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunction.java
index 618b968..8616c22 100644
--- a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunction.java
+++ b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunction.java
@@ -21,19 +21,19 @@
 

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.string.StringFunctionExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 

 public class ExampleStringFunction extends StringFunctionExpression {

 

-  private final TypeExpression expr;

+  private final ITypeExpression expr;

 

-  public ExampleStringFunction(TypeExpression expr) {

+  public ExampleStringFunction(ITypeExpression expr) {

     super();

     this.expr = expr;

   }

 

-  public TypeExpression getExpr() {

+  public ITypeExpression getExpr() {

     return expr;

   }

 

diff --git a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionExtension.java b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionExtension.java
index 0a8e08a..f920531 100644
--- a/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionExtension.java
+++ b/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionExtension.java
@@ -23,7 +23,7 @@
 

 import org.apache.uima.ruta.RutaElement;

 import org.apache.uima.ruta.expression.RutaExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.extensions.IRutaStringFunctionExtension;

 import org.apache.uima.ruta.extensions.RutaParseException;

 import org.apache.uima.ruta.verbalize.RutaVerbalizer;

@@ -45,10 +45,10 @@
 

   public ExampleStringFunction createStringFunction(String name, List<RutaExpression> args)

           throws RutaParseException {

-    if (args == null || args.size() != 1 || !(args.get(0) instanceof TypeExpression)) {

+    if (args == null || args.size() != 1 || !(args.get(0) instanceof ITypeExpression)) {

       throw new RutaParseException("ExampleStringFunction accepts only one TypeExpression as argument!");

     }

-    return new ExampleStringFunction((TypeExpression) args.get(0));

+    return new ExampleStringFunction((ITypeExpression) args.get(0));

   }

 

   public String verbalizeName(RutaElement element) {

diff --git a/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java b/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
index b1fa760..3449eaa 100644
--- a/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
+++ b/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
@@ -21,7 +21,6 @@
 
 import java.util.List;
 
-import org.apache.uima.UimaContext;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.BlockApply;
diff --git a/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java b/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java
index 2826aae..ac9359f 100644
--- a/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java
+++ b/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java
@@ -29,17 +29,17 @@
 import org.apache.uima.ruta.RutaStatement;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.condition.AbstractRutaCondition;
-import org.apache.uima.ruta.expression.MatchReference;
+import org.apache.uima.ruta.expression.IRutaExpression;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
+import org.apache.uima.ruta.rule.ComposedRuleElementMatch;
 import org.apache.uima.ruta.rule.EvaluatedCondition;
 import org.apache.uima.ruta.rule.MatchContext;
 import org.apache.uima.ruta.rule.RuleElement;
+import org.apache.uima.ruta.rule.RuleElementMatch;
+import org.apache.uima.ruta.rule.RuleMatch;
 import org.apache.uima.ruta.rule.RutaMatcher;
 import org.apache.uima.ruta.rule.RutaRule;
 import org.apache.uima.ruta.rule.RutaRuleElement;
-import org.apache.uima.ruta.rule.RuleMatch;
-import org.apache.uima.ruta.rule.RuleElementMatch;
-import org.apache.uima.ruta.rule.ComposedRuleElementMatch;
 import org.apache.uima.ruta.rule.RutaTypeMatcher;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
 import org.apache.uima.ruta.visitor.InferenceCrowd;
@@ -239,9 +239,8 @@
     RutaMatcher matcher = ((RutaRuleElement) element).getMatcher();
     if (matcher instanceof RutaTypeMatcher) {
       RutaTypeMatcher rtm = (RutaTypeMatcher) matcher;
-      MatchReference mr = (MatchReference) rtm.getExpression();
-      FeatureExpression featureExpression = mr.getFeatureExpression(context, stream);
-      if (featureExpression != null) {
+      IRutaExpression expression = rtm.getExpression();
+      if (expression instanceof FeatureExpression) {
         base = matcher.match(annotation, stream, element.getParent());
       }
     }
diff --git a/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g b/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
index 2b5cfed..9a78124 100644
--- a/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
+++ b/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
@@ -83,7 +83,7 @@
 import org.apache.uima.ruta.expression.resource.WordTableExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

 import org.apache.uima.ruta.expression.string.StringFunctionFactory;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.extensions.RutaExternalFactory;

 import org.apache.uima.ruta.extensions.RutaParseRuntimeException;

 import org.apache.uima.ruta.rule.AbstractRuleElement;

@@ -763,7 +763,7 @@
 }

 @init{

 	//RegExpRule rer = null;

-	Map<TypeExpression, IRutaExpression> map = new HashMap<TypeExpression, IRutaExpression>();

+	Map<ITypeExpression, IRutaExpression> map = new HashMap<ITypeExpression, IRutaExpression>();

 }

 	: 

 

@@ -787,8 +787,8 @@
 

 regexpRule returns [RegExpRule stmt = null]

 @init{

-	Map<TypeExpression, INumberExpression> map = new HashMap<TypeExpression, INumberExpression>();

-	Map<TypeExpression, Map<IStringExpression, IRutaExpression>> fa = new HashMap<TypeExpression, Map<IStringExpression, IRutaExpression>>();

+	Map<ITypeExpression, INumberExpression> map = new HashMap<ITypeExpression, INumberExpression>();

+	Map<ITypeExpression, Map<IStringExpression, IRutaExpression>> fa = new HashMap<ITypeExpression, Map<IStringExpression, IRutaExpression>>();

 	Map<IStringExpression, IRutaExpression> fmap = null;

 }

 	:

@@ -1138,7 +1138,7 @@
 

 simpleTypeListExpression returns [TypeListExpression expr = null]

 @init{

-	List<TypeExpression> list = new ArrayList<TypeExpression>();

+	List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }	:

 	LCURLY (e = simpleTypeExpression {list.add(e);} (COMMA e = simpleTypeExpression {list.add(e);})*)?  RCURLY

 	{expr = ExpressionFactory.createTypeListExpression(list);}

@@ -1163,7 +1163,7 @@
 	{mr = ExpressionFactory.createMatchReference(ref);}

 	;

 

-typeExpression returns [TypeExpression type = null]

+typeExpression returns [ITypeExpression type = null]

 options {

 	backtrack = true;

 }

@@ -1174,13 +1174,13 @@
 	

 

 // not checked

-typeFunction returns [TypeExpression expr = null]

+typeFunction returns [ITypeExpression expr = null]

 	:

 	(e = externalTypeFunction)=> e = externalTypeFunction {expr = e;}

 	;

 

 // not checked

-externalTypeFunction returns [TypeExpression expr = null]

+externalTypeFunction returns [ITypeExpression expr = null]

 	:

 	{isTypeFunctionExtension(input.LT(1).getText())}? 

 	id = Identifier LPAREN

@@ -1190,7 +1190,7 @@
 	}

 	;

 

-simpleTypeExpression returns [TypeExpression type = null]

+simpleTypeExpression returns [ITypeExpression type = null]

 	:

 	{isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "TYPE")}? var = Identifier 

 	{type = ExpressionFactory.createReferenceTypeExpression(var);}

@@ -1209,7 +1209,7 @@
 featureExpression returns [FeatureExpression feat = null]

 @init{

 List<Token> fs = new ArrayList<Token>();

-TypeExpression te = null;

+ITypeExpression te = null;

 }

 	:

 	match = dottedId2 

@@ -1268,15 +1268,15 @@
 	;

 

 

-//typeExpressionOr returns [TypeExpression type = null]

-//@init {List<TypeExpression> exprs = new ArrayList<TypeExpression>();}

+//typeExpressionOr returns [ITypeExpression type = null]

+//@init {List<ITypeExpression> exprs = new ArrayList<ITypeExpression>();}

 //	:

 //	LBRACK e = typeExpressionAnd{exprs.add(e);} ( COMMA e = typeExpressionAnd{exprs.add(e);} )* RBRACK

 //	{type = ExpressionFactory.createOrTypeExpression(exprs);}

 //	;

 

-//typeExpressionAnd returns [TypeExpression type = null]

-//@init {List<TypeExpression> exprs = new ArrayList<TypeExpression>();}

+//typeExpressionAnd returns [ITypeExpression type = null]

+//@init {List<ITypeExpression> exprs = new ArrayList<ITypeExpression>();}

 //	:

 //	LBRACK e = simpleTypeExpression{exprs.add(e);} ( SEMI e = simpleTypeExpression{exprs.add(e);} )* RBRACK

 //	{type = ExpressionFactory.createAndTypeExpression(exprs);}

@@ -1880,7 +1880,7 @@
 

 actionRetainType returns [AbstractRutaAction action = null]

 @init {

-List<TypeExpression> list = new ArrayList<TypeExpression>();

+List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }

     :   

     RETAINTYPE (LPAREN id = typeExpression {list.add(id);} (COMMA id = typeExpression {list.add(id);})* RPAREN)?

@@ -1891,7 +1891,7 @@
 

 actionFilterType returns [AbstractRutaAction action = null]

 @init {

-List<TypeExpression> list = new ArrayList<TypeExpression>();

+List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }

     :   

     FILTERTYPE (LPAREN id = typeExpression {list.add(id);} (COMMA id = typeExpression {list.add(id);})* RPAREN)?

@@ -1988,7 +1988,7 @@
 

 actionTrim returns [AbstractRutaAction action = null]

 @init {

-  List<TypeExpression> types = new ArrayList<TypeExpression>();

+  List<ITypeExpression> types = new ArrayList<ITypeExpression>();

 }

     :

     name = TRIM LPAREN 

@@ -2133,7 +2133,7 @@
 

 actionAddRetainType returns [AbstractRutaAction action = null]

 @init {

-List<TypeExpression> list = new ArrayList<TypeExpression>();

+List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }

     :

     ADDRETAINTYPE (LPAREN id = typeExpression {list.add(id);} (COMMA id = typeExpression {list.add(id);})* RPAREN)

@@ -2142,7 +2142,7 @@
 

 actionRemoveRetainType returns [AbstractRutaAction action = null]

 @init {

-List<TypeExpression> list = new ArrayList<TypeExpression>();

+List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }

     :

     REMOVERETAINTYPE (LPAREN id = typeExpression {list.add(id);} (COMMA id = typeExpression {list.add(id);})* RPAREN)

@@ -2151,7 +2151,7 @@
 

 actionAddFilterType returns [AbstractRutaAction action = null]

 @init {

-List<TypeExpression> list = new ArrayList<TypeExpression>();

+List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }

     :

     ADDFILTERTYPE (LPAREN id = typeExpression {list.add(id);} (COMMA id = typeExpression {list.add(id);})* RPAREN)

@@ -2160,7 +2160,7 @@
 

 actionRemoveFilterType returns [AbstractRutaAction action = null]

 @init {

-List<TypeExpression> list = new ArrayList<TypeExpression>();

+List<ITypeExpression> list = new ArrayList<ITypeExpression>();

 }

     :

     REMOVEFILTERTYPE (LPAREN id = typeExpression {list.add(id);} (COMMA id = typeExpression {list.add(id);})* RPAREN)

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java b/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
index 662ef6c..73d7258 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
@@ -46,6 +46,7 @@
 import org.apache.uima.jcas.JCas;

 import org.apache.uima.jcas.tcas.Annotation;

 import org.apache.uima.ruta.engine.RutaEngine;

+import org.apache.uima.ruta.expression.AnnotationTypeExpression;

 import org.apache.uima.ruta.expression.IRutaExpression;

 import org.apache.uima.ruta.expression.bool.IBooleanExpression;

 import org.apache.uima.ruta.expression.feature.FeatureExpression;

@@ -953,20 +954,26 @@
       IBooleanExpression booleanExpr = (IBooleanExpression) value;

       boolean v = booleanExpr.getBooleanValue(context, this);

       annotation.setBooleanValue(feature, v);

+    } else if (value instanceof AnnotationTypeExpression && !feature.getRange().isPrimitive()) {

+      AnnotationTypeExpression ate = (AnnotationTypeExpression) value;

+      AnnotationFS a = ate.getAnnotation(context, this);

+      if (a != null) {

+        // TODO support annotation list expressions

+        if (feature.getRange().isArray()) {

+          List<AnnotationFS> c = new ArrayList<AnnotationFS>();

+          c.add(a);

+          annotation.setFeatureValue(feature, UIMAUtils.toFSArray(this.getJCas(), c));

+        } else {

+          annotation.setFeatureValue(feature, a);

+        }

+      } else {

+        Type t = ate.getType(context, this);

+        assignAnnotationByTypeInWindow(annotation, feature, context, t);

+      }

     } else if (value instanceof ITypeExpression && !feature.getRange().isPrimitive()) {

       ITypeExpression typeExpr = (ITypeExpression) value;

       Type t = typeExpr.getType(context, this);

-      List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), t);

-      if (feature.getRange().isArray()) {

-        annotation.setFeatureValue(feature, UIMAUtils.toFSArray(this.getJCas(), inWindow));

-      } else {

-        if (inWindow != null && !inWindow.isEmpty()) {

-          AnnotationFS a = inWindow.get(0);

-          annotation.setFeatureValue(feature, a);

-        } else {

-          annotation.setFeatureValue(feature, null);

-        }

-      }

+      assignAnnotationByTypeInWindow(annotation, feature, context, t);

     } else if (value instanceof GenericFeatureExpression && !feature.getRange().isPrimitive()) {

       FeatureExpression fe = ((GenericFeatureExpression) value).getFeatureExpression();

       ITypeExpression typeExpr = fe.getTypeExpr(context, this);

@@ -996,4 +1003,20 @@
       }

     }

   }

+

+  private void assignAnnotationByTypeInWindow(AnnotationFS annotation, Feature feature,

+          MatchContext context, Type type) {

+

+    List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), type);

+    if (feature.getRange().isArray()) {

+      annotation.setFeatureValue(feature, UIMAUtils.toFSArray(this.getJCas(), inWindow));

+    } else {

+      if (inWindow != null && !inWindow.isEmpty()) {

+        AnnotationFS a = inWindow.get(0);

+        annotation.setFeatureValue(feature, a);

+      } else {

+        annotation.setFeatureValue(feature, null);

+      }

+    }

+  }

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractMarkAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractMarkAction.java
index b94ef76..7c85cca 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractMarkAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractMarkAction.java
@@ -27,13 +27,13 @@
 import org.apache.uima.jcas.tcas.Annotation;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 

 public abstract class AbstractMarkAction extends TypeSensitiveAction {

 

-  public AbstractMarkAction(TypeExpression type) {

+  public AbstractMarkAction(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java
index 2787763..58fb3a8 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java
@@ -41,7 +41,6 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

 import org.apache.uima.ruta.expression.type.ITypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.utils.UIMAUtils;

 

@@ -58,7 +57,7 @@
       String value = each.getKey().getStringValue(context, stream);

       map.put(value, each.getValue());

     }

-

+    // TODO use method in RutaStream?

     TypeSystem typeSystem = stream.getCas().getTypeSystem();

     JCas jcas = stream.getJCas();

     List<?> featuresList = structure.getType().getFeatures();

@@ -69,9 +68,9 @@
       Object valueObject = map.get(shortFName);

       Type range = targetFeature.getRange();

       if (valueObject != null) {

-        if (valueObject instanceof TypeExpression

+        if (valueObject instanceof ITypeExpression

                 && range.getName().equals(UIMAConstants.TYPE_STRING)) {

-          TypeExpression type = (TypeExpression) valueObject;

+          ITypeExpression type = (ITypeExpression) valueObject;

           List<AnnotationFS> annotationsInWindow = stream.getAnnotationsInWindow(matchedAnnotation,

                   type.getType(context, stream));

           if (annotationsInWindow != null && !annotationsInWindow.isEmpty()) {

@@ -126,8 +125,8 @@
                 && range.getName().equals(UIMAConstants.TYPE_BOOLEAN)) {

           structure.setBooleanValue(targetFeature,

                   ((IBooleanExpression) valueObject).getBooleanValue(context, stream));

-        } else if (valueObject instanceof TypeExpression) {

-          TypeExpression type = (TypeExpression) valueObject;

+        } else if (valueObject instanceof ITypeExpression) {

+          ITypeExpression type = (ITypeExpression) valueObject;

           List<AnnotationFS> annotationsInWindow = stream.getAnnotationsInWindow(matchedAnnotation,

                   type.getType(context, stream));

           if (typeSystem.subsumes(jcas.getCasType(FSArray.type), range)) {

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
index 8c1e4db..ad54cde 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
@@ -35,14 +35,14 @@
 import org.apache.uima.ruta.expression.resource.WordListExpression;

 import org.apache.uima.ruta.expression.resource.WordTableExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 

 public class ActionFactory {

 

   private ActionFactory() {

   }

 

-  public static AbstractRutaAction createColorAction(TypeExpression typeExpr,

+  public static AbstractRutaAction createColorAction(ITypeExpression typeExpr,

           IStringExpression bgcolor, IStringExpression fgcolor, IBooleanExpression selected,

           RutaBlock parent) {

     return new ColorAction(typeExpr, bgcolor, fgcolor, selected);

@@ -52,23 +52,23 @@
     return new DelAction();

   }

 

-  public static AbstractRutaAction createMarkFastAction(TypeExpression type,

+  public static AbstractRutaAction createMarkFastAction(ITypeExpression type,

           WordListExpression list, IBooleanExpression ignore, INumberExpression ignoreLength,

           IBooleanExpression ignoreWS, RutaBlock parent) {

     return new MarkFastAction(type, list, ignore, ignoreLength, ignoreWS);

   }

 

-  public static AbstractRutaAction createMarkFastAction(TypeExpression type,

+  public static AbstractRutaAction createMarkFastAction(ITypeExpression type,

           StringListExpression list, IBooleanExpression ignore, INumberExpression ignoreLength,

           IBooleanExpression ignoreWS, RutaBlock env) {

     return new MarkFastAction(type, list, ignore, ignoreLength, ignoreWS);

   }

 

-  public static AbstractRutaAction createMarkLastAction(TypeExpression type, RutaBlock parent) {

+  public static AbstractRutaAction createMarkLastAction(ITypeExpression type, RutaBlock parent) {

     return new MarkLastAction(type);

   }

 

-  public static AbstractRutaAction createRetainTypeAction(List<TypeExpression> types,

+  public static AbstractRutaAction createRetainTypeAction(List<ITypeExpression> types,

           RutaBlock parent) {

     return new RetainTypeAction(types);

   }

@@ -80,13 +80,13 @@
     return new LogAction(expr, level);

   }

 

-  public static AbstractRutaAction createMarkAction(INumberExpression score, TypeExpression type,

+  public static AbstractRutaAction createMarkAction(INumberExpression score, ITypeExpression type,

           List<INumberExpression> list, RutaBlock parent) {

     return new MarkAction(type, score, list);

   }

 

   public static AbstractRutaAction createMarkOnceAction(INumberExpression score,

-          TypeExpression type, List<INumberExpression> list, RutaBlock env) {

+          ITypeExpression type, List<INumberExpression> list, RutaBlock env) {

     return new MarkOnceAction(type, score, list);

   }

 

@@ -94,19 +94,19 @@
     return new ReplaceAction(lit);

   }

 

-  public static AbstractRutaAction createCreateAction(TypeExpression typeExpr,

+  public static AbstractRutaAction createCreateAction(ITypeExpression typeExpr,

           Map<IStringExpression, IRutaExpression> map, List<INumberExpression> indexes,

           RutaBlock parent) {

     return new CreateAction(typeExpr, map, indexes);

   }

 

-  public static AbstractRutaAction createGatherAction(TypeExpression typeExpr,

+  public static AbstractRutaAction createGatherAction(ITypeExpression typeExpr,

           Map<IStringExpression, IRutaExpression> map, List<INumberExpression> indexes,

           RutaBlock parent) {

     return new GatherAction(typeExpr, map, indexes);

   }

 

-  public static AbstractRutaAction createFillAction(TypeExpression type,

+  public static AbstractRutaAction createFillAction(ITypeExpression type,

           Map<IStringExpression, IRutaExpression> map, RutaBlock parent) {

     return new FillAction(type, map);

   }

@@ -124,27 +124,27 @@
     return new AssignAction(nv.getText(), e);

   }

 

-  public static AbstractRutaAction createFilterTypeAction(List<TypeExpression> types,

+  public static AbstractRutaAction createFilterTypeAction(List<ITypeExpression> types,

           RutaBlock parent) {

     return new FilterTypeAction(types);

   }

 

-  public static AbstractRutaAction createAddRetainTypeAction(List<TypeExpression> types,

+  public static AbstractRutaAction createAddRetainTypeAction(List<ITypeExpression> types,

           RutaBlock env) {

     return new AddRetainTypeAction(types);

   }

 

-  public static AbstractRutaAction createRemoveRetainTypeAction(List<TypeExpression> types,

+  public static AbstractRutaAction createRemoveRetainTypeAction(List<ITypeExpression> types,

           RutaBlock env) {

     return new RemoveRetainTypeAction(types);

   }

 

-  public static AbstractRutaAction createAddFilterTypeAction(List<TypeExpression> types,

+  public static AbstractRutaAction createAddFilterTypeAction(List<ITypeExpression> types,

           RutaBlock env) {

     return new AddFilterTypeAction(types);

   }

 

-  public static AbstractRutaAction createRemoveFilterTypeAction(List<TypeExpression> types,

+  public static AbstractRutaAction createRemoveFilterTypeAction(List<ITypeExpression> types,

           RutaBlock env) {

     return new RemoveFilterTypeAction(types);

   }

@@ -154,12 +154,12 @@
     return new SetFeatureAction(f, v);

   }

 

-  public static AbstractRutaAction createUnmarkAction(TypeExpression f,

+  public static AbstractRutaAction createUnmarkAction(ITypeExpression f,

           List<INumberExpression> list, IBooleanExpression b, RutaBlock env) {

     return new UnmarkAction(f, list, b);

   }

 

-  public static AbstractRutaAction createUnmarkAllAction(TypeExpression f, TypeListExpression list,

+  public static AbstractRutaAction createUnmarkAllAction(ITypeExpression f, TypeListExpression list,

           RutaBlock env) {

     return new UnmarkAllAction(f, list);

   }

@@ -173,7 +173,7 @@
     return new VariableAction(id.getText());

   }

 

-  public static AbstractRutaAction createTransferAction(TypeExpression f, RutaBlock env) {

+  public static AbstractRutaAction createTransferAction(ITypeExpression f, RutaBlock env) {

     return new TransferAction(f);

   }

 

@@ -189,7 +189,7 @@
     return new ExecAction(ns, tl, view);

   }

 

-  public static AbstractRutaAction createMarkTableAction(TypeExpression structure,

+  public static AbstractRutaAction createMarkTableAction(ITypeExpression structure,

           INumberExpression index, WordTableExpression table,

           Map<IStringExpression, INumberExpression> map, IBooleanExpression ignoreCase,

           INumberExpression ignoreLength, IStringExpression ignoreChar,

@@ -242,7 +242,7 @@
     return new ClearAction(var == null ? null : var.getText());

   }

 

-  public static AbstractRutaAction createShiftAction(TypeExpression type,

+  public static AbstractRutaAction createShiftAction(ITypeExpression type,

           List<INumberExpression> list, RutaBlock env) {

     return new ShiftAction(type, list);

   }

@@ -252,7 +252,7 @@
     return new DynamicAnchoringAction(active, penalty, factor);

   }

 

-  public static AbstractRutaAction createTrimAction(List<TypeExpression> types,

+  public static AbstractRutaAction createTrimAction(List<ITypeExpression> types,

           TypeListExpression typeList, RutaBlock env) {

     return new TrimAction(types, typeList);

   }

@@ -261,11 +261,11 @@
     return new ImplicitFeatureAction(fae);

   }

 

-  public static AbstractRutaAction createAction(TypeExpression te) {

+  public static AbstractRutaAction createAction(ITypeExpression te) {

     return new ImplicitMarkAction(te);

   }

 

-  public static AbstractRutaAction createMarkFirstAction(TypeExpression type, RutaBlock env) {

+  public static AbstractRutaAction createMarkFirstAction(ITypeExpression type, RutaBlock env) {

     return new MarkFirstAction(type);

   }

 

@@ -274,7 +274,7 @@
     return new GreedyAnchoringAction(active, active2);

   }

 

-  public static AbstractRutaAction createSplitAction(TypeExpression type,

+  public static AbstractRutaAction createSplitAction(ITypeExpression type,

           IBooleanExpression complete, IBooleanExpression appendToBegin,

           IBooleanExpression appendToEnd, RutaBlock env) {

     return new SplitAction(type, complete, appendToBegin, appendToEnd);

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java
index 412e774..15e3d0d 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/AddAction.java
@@ -30,7 +30,7 @@
 import org.apache.uima.ruta.expression.list.ListExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

@@ -74,8 +74,8 @@
         list.add(((INumberExpression) each).getIntegerValue(context, stream));

       } else if (vgtype.equals(Double.class) && each instanceof INumberExpression) {

         list.add(((INumberExpression) each).getDoubleValue(context, stream));

-      } else if (vgtype.equals(Type.class) && each instanceof TypeExpression) {

-        list.add(((TypeExpression) each).getType(context, stream));

+      } else if (vgtype.equals(Type.class) && each instanceof ITypeExpression) {

+        list.add(((ITypeExpression) each).getType(context, stream));

       } else if (vgtype.equals(String.class) && each instanceof IStringExpression) {

         list.add(((IStringExpression) each).getStringValue(context, stream));

       }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/AddFilterTypeAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/AddFilterTypeAction.java
index 1e6477e..82e6120 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/AddFilterTypeAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/AddFilterTypeAction.java
@@ -24,19 +24,13 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class AddFilterTypeAction extends AbstractRutaAction {

 

-  public List<TypeExpression> getList() {

-    return list;

-  }

-

-  private List<TypeExpression> list;

-

-  public AddFilterTypeAction(List<TypeExpression> list) {

+  public AddFilterTypeAction(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -44,10 +38,17 @@
   @Override

   public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     List<Type> types = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       types.add(each.getType(context, stream));

     }

     stream.addFilterTypes(types);

   }

 

+  public List<ITypeExpression> getList() {

+    return list;

+  }

+

+  private List<ITypeExpression> list;

+

+  

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/AddRetainTypeAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/AddRetainTypeAction.java
index 5193d48..578750b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/AddRetainTypeAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/AddRetainTypeAction.java
@@ -24,19 +24,13 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class AddRetainTypeAction extends AbstractRutaAction {

 

-  public List<TypeExpression> getList() {

-    return list;

-  }

-

-  private List<TypeExpression> list;

-

-  public AddRetainTypeAction(List<TypeExpression> list) {

+  public AddRetainTypeAction(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -44,10 +38,15 @@
   @Override

   public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     List<Type> types = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       types.add(each.getType(context, stream));

     }

     stream.addRetainTypes(types);

   }

 

+  public List<ITypeExpression> getList() {

+    return list;

+  }

+  

+  private List<ITypeExpression> list;

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
index 23b35f9..f4d75f0 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
@@ -27,7 +27,7 @@
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

@@ -56,8 +56,8 @@
     } else if (clazz.equals(Integer.class) && expression instanceof INumberExpression) {

       int v = ((INumberExpression) expression).getIntegerValue(context, stream);

       environment.setVariableValue(var, v);

-    } else if (clazz.equals(Type.class) && expression instanceof TypeExpression) {

-      Type v = ((TypeExpression) expression).getType(context, stream);

+    } else if (clazz.equals(Type.class) && expression instanceof ITypeExpression) {

+      Type v = ((ITypeExpression) expression).getType(context, stream);

       environment.setVariableValue(var, v);

     } else if (clazz.equals(Boolean.class) && expression instanceof IBooleanExpression) {

       boolean v = ((IBooleanExpression) expression).getBooleanValue(context, stream);

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/ColorAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/ColorAction.java
index ebd1d8a..33045c5 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/ColorAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/ColorAction.java
@@ -26,7 +26,7 @@
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

 import org.apache.uima.ruta.expression.string.SimpleStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.type.RutaColoring;

@@ -40,9 +40,9 @@
 

   private IBooleanExpression selected;

 

-  private TypeExpression type;

+  private ITypeExpression type;

 

-  public ColorAction(TypeExpression type, IStringExpression bgcolor, IStringExpression fgcolor,

+  public ColorAction(ITypeExpression type, IStringExpression bgcolor, IStringExpression fgcolor,

           IBooleanExpression selected) {

     super();

     this.type = type;

@@ -80,7 +80,7 @@
     return selected;

   }

 

-  public TypeExpression getType() {

+  public ITypeExpression getType() {

     return type;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/ConfigureAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/ConfigureAction.java
index 86d29d4..d926140 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/ConfigureAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/ConfigureAction.java
@@ -41,7 +41,7 @@
 import org.apache.uima.ruta.expression.list.TypeListExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

@@ -96,8 +96,8 @@
               IStringExpression se = (IStringExpression) value;

               String string = se.getStringValue(context, stream);

               targetEngine.setConfigParameterValue(stringValue, string);

-            } else if (value instanceof TypeExpression) {

-              TypeExpression te = (TypeExpression) value;

+            } else if (value instanceof ITypeExpression) {

+              ITypeExpression te = (ITypeExpression) value;

               Type t = te.getType(context, stream);

               targetEngine.setConfigParameterValue(stringValue, t.getName());

             }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java
index dd49bdd..1f6c920 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java
@@ -30,7 +30,7 @@
 import org.apache.uima.ruta.expression.IRutaExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -38,13 +38,13 @@
 

 public class CreateAction extends AbstractStructureAction {

 

-  private TypeExpression structureType;

+  private ITypeExpression structureType;

 

   private Map<IStringExpression, IRutaExpression> features;

 

   private List<INumberExpression> indexes;

 

-  public CreateAction(TypeExpression structureType,

+  public CreateAction(ITypeExpression structureType,

           Map<IStringExpression, IRutaExpression> features, List<INumberExpression> indexes) {

     super();

     this.structureType = structureType;

@@ -77,7 +77,7 @@
     }

   }

 

-  public TypeExpression getStructureType() {

+  public ITypeExpression getStructureType() {

     return structureType;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
index 76362fe..d330982 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
@@ -27,7 +27,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.IRutaExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -37,9 +37,9 @@
 

   private Map<IStringExpression, IRutaExpression> features;

 

-  private TypeExpression structureType;

+  private ITypeExpression structureType;

 

-  public FillAction(TypeExpression structureType, Map<IStringExpression, IRutaExpression> features) {

+  public FillAction(ITypeExpression structureType, Map<IStringExpression, IRutaExpression> features) {

     super();

     this.structureType = structureType;

     this.features = features;

@@ -86,7 +86,7 @@
     return features;

   }

 

-  public TypeExpression getStructureType() {

+  public ITypeExpression getStructureType() {

     return structureType;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/FilterTypeAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/FilterTypeAction.java
index 74bfaa0..6166143 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/FilterTypeAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/FilterTypeAction.java
@@ -24,19 +24,14 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class FilterTypeAction extends AbstractRutaAction {

 

-  public List<TypeExpression> getList() {

-    return list;

-  }

 

-  private List<TypeExpression> list;

-

-  public FilterTypeAction(List<TypeExpression> list) {

+  public FilterTypeAction(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -45,10 +40,16 @@
   public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     context.getElement();

     List<Type> types = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       types.add(each.getType(context, stream));

     }

     stream.filterTypes(types);

   }

 

+  public List<ITypeExpression> getList() {

+    return list;

+  }

+  

+  private List<ITypeExpression> list;

+

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java
index f833151..859bb0a 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java
@@ -42,7 +42,7 @@
 import org.apache.uima.ruta.expression.list.NumberListExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleElementMatch;

@@ -53,13 +53,13 @@
 

 public class GatherAction extends AbstractStructureAction {

 

-  private TypeExpression structureType;

+  private ITypeExpression structureType;

 

   private Map<IStringExpression, IRutaExpression> features;

 

   private List<INumberExpression> indexes;

 

-  public GatherAction(TypeExpression structureType,

+  public GatherAction(ITypeExpression structureType,

           Map<IStringExpression, IRutaExpression> features, List<INumberExpression> indexes) {

     super();

     this.structureType = structureType;

@@ -210,7 +210,7 @@
   }

 

 

-  public TypeExpression getStructureType() {

+  public ITypeExpression getStructureType() {

     return structureType;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitMarkAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitMarkAction.java
index 0b7a7b1..e98730b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitMarkAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitMarkAction.java
@@ -23,7 +23,7 @@
 

 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -31,7 +31,7 @@
 

 public class ImplicitMarkAction extends AbstractMarkAction {

 

-  public ImplicitMarkAction(TypeExpression te) {

+  public ImplicitMarkAction(ITypeExpression te) {

     super(te);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkAction.java
index 2465996..31fcb30 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkAction.java
@@ -26,7 +26,7 @@
 import org.apache.uima.jcas.tcas.Annotation;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -39,7 +39,7 @@
 

   protected final List<INumberExpression> list;

 

-  public MarkAction(TypeExpression type, INumberExpression scoreValue, List<INumberExpression> list) {

+  public MarkAction(ITypeExpression type, INumberExpression scoreValue, List<INumberExpression> list) {

     super(type);

     this.score = scoreValue;

     this.list = list;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFastAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFastAction.java
index bc92d8d..346756f 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFastAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFastAction.java
@@ -30,7 +30,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

 import org.apache.uima.ruta.expression.resource.WordListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.resource.RutaWordList;

 import org.apache.uima.ruta.resource.TreeWordList;

 import org.apache.uima.ruta.rule.MatchContext;

@@ -50,7 +50,7 @@
 

   private IBooleanExpression ignoreWS;

 

-  public MarkFastAction(TypeExpression type, WordListExpression list, IBooleanExpression ignore,

+  public MarkFastAction(ITypeExpression type, WordListExpression list, IBooleanExpression ignore,

           INumberExpression ignoreLength, IBooleanExpression ignoreWS) {

     super(type);

     this.list = list;

@@ -60,7 +60,7 @@
     this.ignoreWS = ignoreWS == null ? new SimpleBooleanExpression(true) : ignoreWS;

   }

 

-  public MarkFastAction(TypeExpression type, StringListExpression list, IBooleanExpression ignore,

+  public MarkFastAction(ITypeExpression type, StringListExpression list, IBooleanExpression ignore,

           INumberExpression ignoreLength, IBooleanExpression ignoreWS) {

     super(type);

     this.stringList = list;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFirstAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFirstAction.java
index 5a26c1f..76291a8 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFirstAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkFirstAction.java
@@ -23,7 +23,7 @@
 

 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -32,7 +32,7 @@
 

 public class MarkFirstAction extends AbstractMarkAction {

 

-  public MarkFirstAction(TypeExpression type) {

+  public MarkFirstAction(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkLastAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkLastAction.java
index 0194aae..03cf17b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkLastAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkLastAction.java
@@ -23,7 +23,7 @@
 

 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -32,7 +32,7 @@
 

 public class MarkLastAction extends AbstractMarkAction {

 

-  public MarkLastAction(TypeExpression type) {

+  public MarkLastAction(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkOnceAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkOnceAction.java
index 32a002c..27744c1 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkOnceAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkOnceAction.java
@@ -25,7 +25,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -34,7 +34,7 @@
 

 public class MarkOnceAction extends MarkAction {

 

-  public MarkOnceAction(TypeExpression type, INumberExpression scoreValue,

+  public MarkOnceAction(ITypeExpression type, INumberExpression scoreValue,

           List<INumberExpression> list) {

     super(type, scoreValue, list);

   }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkTableAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkTableAction.java
index 655efca..47391cd 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkTableAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/MarkTableAction.java
@@ -38,7 +38,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.resource.WordTableExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.resource.RutaTable;

 import org.apache.uima.ruta.resource.RutaWordList;

 import org.apache.uima.ruta.rule.MatchContext;

@@ -48,7 +48,7 @@
 

 public class MarkTableAction extends AbstractRutaAction {

 

-  private final TypeExpression typeExpr;

+  private final ITypeExpression typeExpr;

 

   private final WordTableExpression tableExpr;

 

@@ -66,7 +66,7 @@
 

   private IBooleanExpression ignoreWS = new SimpleBooleanExpression(true);

 

-  public MarkTableAction(TypeExpression typeExpr, INumberExpression indexExpr,

+  public MarkTableAction(ITypeExpression typeExpr, INumberExpression indexExpr,

           WordTableExpression tableExpr, Map<IStringExpression, INumberExpression> featureMap,

           IBooleanExpression ignoreCase, INumberExpression ignoreLength,

           IStringExpression ignoreChar, INumberExpression maxIgnoreChar) {

@@ -181,7 +181,7 @@
     }

   }

 

-  public TypeExpression getTypeExpr() {

+  public ITypeExpression getTypeExpr() {

     return typeExpr;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveAction.java
index 804f267..f429990 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveAction.java
@@ -29,7 +29,7 @@
 import org.apache.uima.ruta.expression.list.ListExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

@@ -92,8 +92,8 @@
       return ((INumberExpression) obj).getDoubleValue(context, stream);

     } else if (obj instanceof IBooleanExpression) {

       return ((IBooleanExpression) obj).getBooleanValue(context, stream);

-    } else if (obj instanceof TypeExpression) {

-      return ((TypeExpression) obj).getType(context, stream);

+    } else if (obj instanceof ITypeExpression) {

+      return ((ITypeExpression) obj).getType(context, stream);

     } else if (obj instanceof IStringExpression) {

       return ((IStringExpression) obj).getStringValue(context, stream);

     }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveDuplicateAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveDuplicateAction.java
index c3eea9b..cd493c7 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveDuplicateAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveDuplicateAction.java
@@ -28,7 +28,7 @@
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

@@ -70,8 +70,8 @@
       return ((INumberExpression) obj).getDoubleValue(context, stream);

     } else if (obj instanceof IBooleanExpression) {

       return ((IBooleanExpression) obj).getBooleanValue(context, stream);

-    } else if (obj instanceof TypeExpression) {

-      return ((TypeExpression) obj).getType(context, stream);

+    } else if (obj instanceof ITypeExpression) {

+      return ((ITypeExpression) obj).getType(context, stream);

     } else if (obj instanceof IStringExpression) {

       return ((IStringExpression) obj).getStringValue(context, stream);

     }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveFilterTypeAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveFilterTypeAction.java
index 17be36b..066a46e 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveFilterTypeAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveFilterTypeAction.java
@@ -24,19 +24,13 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class RemoveFilterTypeAction extends AbstractRutaAction {

 

-  public List<TypeExpression> getList() {

-    return list;

-  }

-

-  private List<TypeExpression> list;

-

-  public RemoveFilterTypeAction(List<TypeExpression> list) {

+  public RemoveFilterTypeAction(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -45,10 +39,16 @@
   public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     context.getElement();

     List<Type> types = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       types.add(each.getType(context, stream));

     }

     stream.removeFilterTypes(types);

   }

 

+  public List<ITypeExpression> getList() {

+    return list;

+  }

+  

+  private List<ITypeExpression> list;

+

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveRetainTypeAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveRetainTypeAction.java
index 13a71f0..2715f38 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveRetainTypeAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/RemoveRetainTypeAction.java
@@ -24,19 +24,13 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class RemoveRetainTypeAction extends AbstractRutaAction {

 

-  public List<TypeExpression> getList() {

-    return list;

-  }

-

-  private List<TypeExpression> list;

-

-  public RemoveRetainTypeAction(List<TypeExpression> list) {

+  public RemoveRetainTypeAction(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -45,10 +39,16 @@
   public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     context.getElement();

     List<Type> types = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       types.add(each.getType(context, stream));

     }

     stream.removeRetainTypes(types);

   }

 

+  public List<ITypeExpression> getList() {

+    return list;

+  }

+  

+  private List<ITypeExpression> list;

+

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/RetainTypeAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/RetainTypeAction.java
index 387482c..9d3943e 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/RetainTypeAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/RetainTypeAction.java
@@ -24,19 +24,13 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class RetainTypeAction extends AbstractRutaAction {

 

-  public List<TypeExpression> getList() {

-    return list;

-  }

-

-  private List<TypeExpression> list;

-

-  public RetainTypeAction(List<TypeExpression> list) {

+  public RetainTypeAction(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -45,10 +39,15 @@
   public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     context.getElement();

     List<Type> types = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       types.add(each.getType(context, stream));

     }

     stream.retainTypes(types);

   }

 

+  public List<ITypeExpression> getList() {

+    return list;

+  }

+  

+  private List<ITypeExpression> list;

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/ShiftAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/ShiftAction.java
index 7c944de..080e30c 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/ShiftAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/ShiftAction.java
@@ -29,7 +29,7 @@
 import org.apache.uima.jcas.tcas.Annotation;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.AnnotationComparator;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -39,7 +39,7 @@
 

 public class ShiftAction extends MarkAction {

 

-  public ShiftAction(TypeExpression type, List<INumberExpression> list) {

+  public ShiftAction(ITypeExpression type, List<INumberExpression> list) {

     super(type, null, list);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java
index 0cc8086..d6632e7 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java
@@ -31,7 +31,7 @@
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.rule.MatchContext;
 import org.apache.uima.ruta.rule.RuleElement;
 import org.apache.uima.ruta.rule.RuleMatch;
@@ -41,7 +41,7 @@
 
 public class SplitAction extends AbstractRutaAction {
 
-  private TypeExpression splitOnType;
+  private ITypeExpression splitOnType;
 
   private IBooleanExpression complete;
 
@@ -49,7 +49,7 @@
 
   private IBooleanExpression appendToEnd;
 
-  public SplitAction(TypeExpression splitOnType, IBooleanExpression complete,
+  public SplitAction(ITypeExpression splitOnType, IBooleanExpression complete,
           IBooleanExpression appendToBegin, IBooleanExpression appendToEnd) {
     super();
     this.splitOnType = splitOnType;
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/TransferAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/TransferAction.java
index 4a7f8ee..bb08290 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/TransferAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/TransferAction.java
@@ -27,7 +27,7 @@
 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.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleElementMatch;

@@ -36,7 +36,7 @@
 

 public class TransferAction extends TypeSensitiveAction {

 

-  public TransferAction(TypeExpression type) {

+  public TransferAction(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/TrieAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/TrieAction.java
index 8034092..2957803 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/TrieAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/TrieAction.java
@@ -33,7 +33,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.resource.WordListExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.resource.RutaWordList;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -78,8 +78,8 @@
     for (IStringExpression eachKey : map.keySet()) {

       String stringValue = eachKey.getStringValue(context, stream);

       IRutaExpression expression = map.get(eachKey);

-      if (expression instanceof TypeExpression) {

-        Type typeValue = ((TypeExpression) expression).getType(context, stream);

+      if (expression instanceof ITypeExpression) {

+        Type typeValue = ((ITypeExpression) expression).getType(context, stream);

         typeMap.put(stringValue, typeValue);

       } else if (expression instanceof UntypedListExpression) {

         List<Object> innerList = ((UntypedListExpression) expression).getList(context, stream);

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/TrimAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/TrimAction.java
index a9712cf..76b4179 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/TrimAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/TrimAction.java
@@ -27,7 +27,7 @@
 import org.apache.uima.jcas.tcas.Annotation;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -38,9 +38,9 @@
 

   private TypeListExpression typeList;

 

-  private List<TypeExpression> types;

+  private List<ITypeExpression> types;

 

-  public TrimAction(List<TypeExpression> types, TypeListExpression typeList) {

+  public TrimAction(List<ITypeExpression> types, TypeListExpression typeList) {

     super();

     this.types = types;

     this.typeList = typeList;

@@ -113,7 +113,7 @@
   private List<Type> getTypes(MatchContext context, RutaStream stream) {

     List<Type> result = new ArrayList<Type>();

     if (types != null) {

-      for (TypeExpression each : types) {

+      for (ITypeExpression each : types) {

         result.add(each.getType(context, stream));

       }

     } else if (typeList != null) {

@@ -126,7 +126,7 @@
     return typeList;

   }

 

-  public List<TypeExpression> getTypes() {

+  public List<ITypeExpression> getTypes() {

     return types;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/TypeSensitiveAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/TypeSensitiveAction.java
index 22937bb..f209f5d 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/TypeSensitiveAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/TypeSensitiveAction.java
@@ -19,18 +19,18 @@
 

 package org.apache.uima.ruta.action;

 

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 

 public abstract class TypeSensitiveAction extends AbstractRutaAction {

 

-  public TypeSensitiveAction(TypeExpression type) {

+  protected ITypeExpression type;

+

+  public TypeSensitiveAction(ITypeExpression type) {

     super();

     this.type = type;

   }

 

-  protected TypeExpression type;

-

-  public TypeExpression getType() {

+  public ITypeExpression getType() {

     return type;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java
index 52f7989..514cfbf 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java
@@ -28,7 +28,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.bool.IBooleanExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleMatch;

@@ -41,7 +41,7 @@
 

   private IBooleanExpression allAnchor;

 

-  public UnmarkAction(TypeExpression type, List<INumberExpression> list, IBooleanExpression b) {

+  public UnmarkAction(ITypeExpression type, List<INumberExpression> list, IBooleanExpression b) {

     super(type);

     this.list = list;

     this.allAnchor = b;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java
index 08dcd36..0e849c0 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java
@@ -29,7 +29,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

 import org.apache.uima.ruta.rule.RuleElementMatch;

@@ -41,7 +41,7 @@
 

   private final TypeListExpression list;

 

-  public UnmarkAllAction(TypeExpression type, TypeListExpression list) {

+  public UnmarkAllAction(ITypeExpression type, TypeListExpression list) {

     super(type);

     this.list = list;

   }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java
index e3c1d68..6080874 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/AfterCondition.java
@@ -26,14 +26,14 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class AfterCondition extends TypeSentiveCondition {

 

-  public AfterCondition(TypeExpression type) {

+  public AfterCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
index ae6673f..4deb9de 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
@@ -26,14 +26,14 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class BeforeCondition extends TypeSentiveCondition {

 

-  public BeforeCondition(TypeExpression type) {

+  public BeforeCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
index b3e3bf9..6de1008 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
@@ -31,7 +31,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.resource.WordListExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 

 public class ConditionFactory {

 

@@ -53,12 +53,12 @@
     return new NotCondition(cond);

   }

 

-  public static AbstractRutaCondition createConditionContains(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionContains(ITypeExpression typeExpr,

           INumberExpression min, INumberExpression max, IBooleanExpression percent, RutaBlock parent) {

     return new ContainsCondition(typeExpr, min, max, percent);

   }

 

-  public static AbstractRutaCondition createConditionContextCount(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionContextCount(ITypeExpression typeExpr,

           INumberExpression min, INumberExpression max, Token var, RutaBlock parent) {

     String varString = null;

     if (var != null) {

@@ -67,7 +67,7 @@
     return new ContextCountCondition(typeExpr, min, max, varString);

   }

 

-  public static AbstractRutaCondition createConditionCurrentCount(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionCurrentCount(ITypeExpression typeExpr,

           INumberExpression min, INumberExpression max, Token var, RutaBlock parent) {

     String varString = null;

     if (var != null) {

@@ -76,7 +76,7 @@
     return new CurrentCountCondition(typeExpr, min, max, varString);

   }

 

-  public static AbstractRutaCondition createConditionCount(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionCount(ITypeExpression typeExpr,

           INumberExpression min, INumberExpression max, Token var, RutaBlock parent) {

     String varString = null;

     if (var != null) {

@@ -85,7 +85,7 @@
     return new CountCondition(typeExpr, min, max, varString);

   }

 

-  public static AbstractRutaCondition createConditionTotalCount(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionTotalCount(ITypeExpression typeExpr,

           INumberExpression min, INumberExpression max, Token var, RutaBlock parent) {

     String varString = null;

     if (var != null) {

@@ -104,13 +104,13 @@
     return new MOfNCondition(conds, min, max);

   }

 

-  public static AbstractRutaCondition createConditionNear(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionNear(ITypeExpression typeExpr,

           INumberExpression min, INumberExpression max, IBooleanExpression direction,

           IBooleanExpression filtered, RutaBlock parent) {

     return new NearCondition(typeExpr, min, max, direction, filtered);

   }

 

-  public static AbstractRutaCondition createConditionPartOf(TypeExpression type,

+  public static AbstractRutaCondition createConditionPartOf(ITypeExpression type,

           TypeListExpression list, RutaBlock parent) {

     if (type != null) {

       return new PartOfCondition(type);

@@ -119,7 +119,7 @@
     }

   }

 

-  public static AbstractRutaCondition createConditionPosition(TypeExpression typeExpr,

+  public static AbstractRutaCondition createConditionPosition(ITypeExpression typeExpr,

           INumberExpression pos, IBooleanExpression rel, RutaBlock parent) {

     return new PositionCondition(typeExpr, pos, rel);

   }

@@ -143,12 +143,12 @@
     return new ScoreCondition(min, max, varString);

   }

 

-  public static AbstractRutaCondition createConditionVote(TypeExpression type1Expr,

-          TypeExpression type2Expr, RutaBlock parent) {

+  public static AbstractRutaCondition createConditionVote(ITypeExpression type1Expr,

+          ITypeExpression type2Expr, RutaBlock parent) {

     return new VoteCondition(type1Expr, type2Expr);

   }

 

-  public static AbstractRutaCondition createConditionLast(TypeExpression typeExpr, RutaBlock parent) {

+  public static AbstractRutaCondition createConditionLast(ITypeExpression typeExpr, RutaBlock parent) {

     return new LastCondition(typeExpr);

   }

 

@@ -178,7 +178,7 @@
     return new VariableCondition(id.getText());

   }

 

-  public static AbstractRutaCondition createConditionIs(TypeExpression type,

+  public static AbstractRutaCondition createConditionIs(ITypeExpression type,

           TypeListExpression list, RutaBlock env) {

     if (type != null) {

       return new IsCondition(type);

@@ -187,7 +187,7 @@
     }

   }

 

-  public static AbstractRutaCondition createConditionAfter(TypeExpression type,

+  public static AbstractRutaCondition createConditionAfter(ITypeExpression type,

           TypeListExpression list, RutaBlock env) {

     if (type != null) {

       return new AfterCondition(type);

@@ -196,7 +196,7 @@
     }

   }

 

-  public static AbstractRutaCondition createConditionBefore(TypeExpression type,

+  public static AbstractRutaCondition createConditionBefore(ITypeExpression type,

           TypeListExpression list, RutaBlock env) {

     if (type != null) {

       return new BeforeCondition(type);

@@ -205,7 +205,7 @@
     }

   }

 

-  public static AbstractRutaCondition createConditionEndsWith(TypeExpression type,

+  public static AbstractRutaCondition createConditionEndsWith(ITypeExpression type,

           TypeListExpression list, RutaBlock env) {

     if (type != null) {

       return new EndsWithCondition(type);

@@ -214,7 +214,7 @@
     }

   }

 

-  public static AbstractRutaCondition createConditionStartsWith(TypeExpression type,

+  public static AbstractRutaCondition createConditionStartsWith(ITypeExpression type,

           TypeListExpression list, RutaBlock env) {

     if (type != null) {

       return new StartsWithCondition(type);

@@ -223,7 +223,7 @@
     }

   }

 

-  public static AbstractRutaCondition createConditionPartOfNeq(TypeExpression type,

+  public static AbstractRutaCondition createConditionPartOfNeq(ITypeExpression type,

           TypeListExpression list, RutaBlock env) {

     if (type != null) {

       return new PartOfNeqCondition(type);

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
index 6a49d3d..47f866b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
@@ -36,7 +36,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -55,7 +55,7 @@
   @SuppressWarnings("rawtypes")

   private ListExpression argList;

 

-  public ContainsCondition(TypeExpression type, INumberExpression min, INumberExpression max,

+  public ContainsCondition(ITypeExpression type, INumberExpression min, INumberExpression max,

           IBooleanExpression percent) {

     super(type);

     this.min = min == null ? new SimpleNumberExpression(Integer.valueOf(1)) : min;

@@ -66,7 +66,7 @@
   @SuppressWarnings("rawtypes")

   public ContainsCondition(ListExpression list, IRutaExpression a, INumberExpression min,

           INumberExpression max, IBooleanExpression percent) {

-    super((TypeExpression) null);

+    super((ITypeExpression) null);

     this.min = min == null ? new SimpleNumberExpression(Integer.valueOf(1)) : min;

     this.max = max == null ? new SimpleNumberExpression(Integer.MAX_VALUE) : max;

     this.percent = percent == null ? new SimpleBooleanExpression(false) : percent;

@@ -122,8 +122,8 @@
         while (l.remove(v)) {

           basicCount++;

         }

-      } else if (arg instanceof TypeExpression && argList instanceof TypeListExpression) {

-        TypeExpression e = (TypeExpression) arg;

+      } else if (arg instanceof ITypeExpression && argList instanceof TypeListExpression) {

+        ITypeExpression e = (ITypeExpression) arg;

         TypeListExpression le = (TypeListExpression) argList;

         Type v = e.getType(context, stream);

         List<Type> l = new ArrayList<Type>(le.getList(context, stream));

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
index 446b172..1adc903 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
@@ -28,7 +28,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -43,7 +43,7 @@
 

   private final String var;

 

-  public ContextCountCondition(TypeExpression type, INumberExpression min, INumberExpression max,

+  public ContextCountCondition(ITypeExpression type, INumberExpression min, INumberExpression max,

           String var) {

     super(type);

     this.min = min == null ? new SimpleNumberExpression(Integer.MIN_VALUE) : min;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/CountCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/CountCondition.java
index e7fcdae..7252f48 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/CountCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/CountCondition.java
@@ -35,7 +35,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -54,7 +54,7 @@
 

   private IRutaExpression arg;

 

-  public CountCondition(TypeExpression type, INumberExpression min, INumberExpression max,

+  public CountCondition(ITypeExpression type, INumberExpression min, INumberExpression max,

           String var) {

     super(type);

     this.min = min == null ? new SimpleNumberExpression(Integer.MIN_VALUE) : min;

@@ -64,7 +64,7 @@
 

   public CountCondition(@SuppressWarnings("rawtypes") ListExpression list, IRutaExpression a, INumberExpression min,

           INumberExpression max, String var) {

-    super((TypeExpression) null);

+    super((ITypeExpression) null);

     this.list = list;

     this.arg = a;

     this.min = min == null ? new SimpleNumberExpression(Integer.MIN_VALUE) : min;

@@ -113,8 +113,8 @@
         while (l.remove(v)) {

           count++;

         }

-      } else if (arg instanceof TypeExpression && list instanceof TypeListExpression) {

-        TypeExpression e = (TypeExpression) arg;

+      } else if (arg instanceof ITypeExpression && list instanceof TypeListExpression) {

+        ITypeExpression e = (ITypeExpression) arg;

         TypeListExpression le = (TypeListExpression) list;

         Type v = e.getType(context, stream);

         List<Type> l = new ArrayList<Type>(le.getList(context, stream));

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java
index d85c000..5809f23 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/CurrentCountCondition.java
@@ -25,7 +25,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -38,7 +38,7 @@
 

   private final String var;

 

-  public CurrentCountCondition(TypeExpression type, INumberExpression min, INumberExpression max,

+  public CurrentCountCondition(ITypeExpression type, INumberExpression min, INumberExpression max,

           String var) {

     super(type);

     this.min = min == null ? new SimpleNumberExpression(Integer.MIN_VALUE) : min;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java
index fce399d..a5f4b89 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/EndsWithCondition.java
@@ -25,7 +25,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -33,7 +33,7 @@
 

 public class EndsWithCondition extends TypeSentiveCondition {

 

-  public EndsWithCondition(TypeExpression type) {

+  public EndsWithCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
index 5b2872d..92f1433 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
@@ -26,7 +26,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -34,7 +34,7 @@
 

 public class IsCondition extends TypeSentiveCondition {

 

-  public IsCondition(TypeExpression type) {

+  public IsCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java
index 78fed68..b8576d5 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/LastCondition.java
@@ -22,7 +22,7 @@
 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.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -30,7 +30,7 @@
 

 public class LastCondition extends TypeSentiveCondition {

 

-  public LastCondition(TypeExpression type) {

+  public LastCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java
index 3321a4c..c86c8d0 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/NearCondition.java
@@ -27,7 +27,7 @@
 import org.apache.uima.ruta.expression.bool.SimpleBooleanExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -43,7 +43,7 @@
 

   private final IBooleanExpression filtered;

 

-  public NearCondition(TypeExpression type, INumberExpression min, INumberExpression max,

+  public NearCondition(ITypeExpression type, INumberExpression min, INumberExpression max,

           IBooleanExpression forward, IBooleanExpression filtered) {

     super(type);

     this.min = min == null ? new SimpleNumberExpression(1) : min;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java
index ba59794..906700f 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java
@@ -26,7 +26,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -35,7 +35,7 @@
 

 public class PartOfCondition extends TypeSentiveCondition {

 

-  public PartOfCondition(TypeExpression type) {

+  public PartOfCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java
index ef92892..5d01297 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java
@@ -26,7 +26,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -34,7 +34,7 @@
 

 public class PartOfNeqCondition extends TypeSentiveCondition {

 

-  public PartOfNeqCondition(TypeExpression type) {

+  public PartOfNeqCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java
index 0d5d60b..0893e4d 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/PositionCondition.java
@@ -28,7 +28,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.bool.IBooleanExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -42,7 +42,7 @@
 

   private final IBooleanExpression relative;

 

-  public PositionCondition(TypeExpression type, INumberExpression position,

+  public PositionCondition(ITypeExpression type, INumberExpression position,

           IBooleanExpression relative) {

     super(type);

     this.position = position;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java
index 1eb4a24..0c964f0 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/StartsWithCondition.java
@@ -25,7 +25,7 @@
 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -33,7 +33,7 @@
 

 public class StartsWithCondition extends TypeSentiveCondition {

 

-  public StartsWithCondition(TypeExpression type) {

+  public StartsWithCondition(ITypeExpression type) {

     super(type);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/TotalCountCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/TotalCountCondition.java
index 8d43606..6b6c2e1 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/TotalCountCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/TotalCountCondition.java
@@ -25,7 +25,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.rule.RuleElement;

@@ -38,7 +38,7 @@
 

   private final String var;

 

-  public TotalCountCondition(TypeExpression type, INumberExpression min, INumberExpression max,

+  public TotalCountCondition(ITypeExpression type, INumberExpression min, INumberExpression max,

           String var) {

     super(type);

     this.min = min == null ? new SimpleNumberExpression(Integer.MIN_VALUE) : min;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/TypeSentiveCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/TypeSentiveCondition.java
index 0c6dc43..da909dc 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/TypeSentiveCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/TypeSentiveCondition.java
@@ -20,19 +20,19 @@
 package org.apache.uima.ruta.condition;

 

 import org.apache.uima.ruta.expression.list.TypeListExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 

 public abstract class TypeSentiveCondition extends TerminalRutaCondition {

 

-  protected final TypeExpression type;

+  protected final ITypeExpression type;

 

   private final TypeListExpression list;

 

-  public TypeExpression getType() {

+  public ITypeExpression getType() {

     return type;

   }

 

-  public TypeSentiveCondition(TypeExpression type) {

+  public TypeSentiveCondition(ITypeExpression type) {

     super();

     this.type = type;

     this.list = null;

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java
index 54a1f75..220c83d 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java
@@ -24,7 +24,7 @@
 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.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

 import org.apache.uima.ruta.type.RutaBasic;

@@ -32,11 +32,11 @@
 

 public class VoteCondition extends TerminalRutaCondition {

 

-  private final TypeExpression type1;

+  private final ITypeExpression type1;

 

-  private final TypeExpression type2;

+  private final ITypeExpression type2;

 

-  public VoteCondition(TypeExpression type1, TypeExpression type2) {

+  public VoteCondition(ITypeExpression type1, ITypeExpression type2) {

     super();

     this.type1 = type1;

     this.type2 = type2;

@@ -63,11 +63,11 @@
     return new EvaluatedCondition(this, count1 > count2);

   }

 

-  public TypeExpression getType1() {

+  public ITypeExpression getType1() {

     return type1;

   }

 

-  public TypeExpression getType2() {

+  public ITypeExpression getType2() {

     return type2;

   }

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
index fe12746..4540640 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
@@ -54,6 +54,9 @@
     if (!initialized) {
       initialize(context, stream);
     }
+    if(annotationExpression == null) {
+      return null;
+    }
     return annotationExpression.getAnnotation(context, stream);
   }
 
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
index 9fc8ad3..394f2d6 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
@@ -74,8 +74,8 @@
 import org.apache.uima.ruta.expression.string.SimpleStringExpression;

 import org.apache.uima.ruta.expression.string.StringFeatureExpression;

 import org.apache.uima.ruta.expression.string.StringVariableExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.expression.type.TypeVariableExpression;

 

 public class ExpressionFactory {

@@ -167,17 +167,17 @@
     return new BooleanVariableExpression(id.getText());

   }

 

-  public static TypeExpression createSimpleTypeExpression(Token typeToken, RutaBlock parent) {

+  public static ITypeExpression createSimpleTypeExpression(Token typeToken, RutaBlock parent) {

     String typeString = typeToken == null ? "uima.tcas.DocumentAnnotation" : typeToken.getText();

     return new SimpleTypeExpression(typeString);

   }

 

-  public static TypeExpression createReferenceTypeExpression(Token varToken) {

+  public static ITypeExpression createReferenceTypeExpression(Token varToken) {

     String varString = varToken == null ? "" : varToken.getText();

     return new TypeVariableExpression(varString);

   }

 

-  public static TypeExpression createSimpleTypeExpression(String typeString, RutaBlock parent) {

+  public static ITypeExpression createSimpleTypeExpression(String typeString, RutaBlock parent) {

     return new SimpleTypeExpression(typeString);

   }

 

@@ -202,8 +202,8 @@
     return new LiteralWordTableExpression(path.getText());

   }

 

-  public static IBooleanExpression createBooleanTypeExpression(TypeExpression e1, Token op,

-          TypeExpression e2) {

+  public static IBooleanExpression createBooleanTypeExpression(ITypeExpression e1, Token op,

+          ITypeExpression e2) {

     return new BooleanTypeExpression(e1, op.getText(), e2);

   }

 

@@ -239,7 +239,7 @@
     return new SimpleNumberListExpression(list);

   }

 

-  public static TypeListExpression createTypeListExpression(List<TypeExpression> list) {

+  public static TypeListExpression createTypeListExpression(List<ITypeExpression> list) {

     return new SimpleTypeListExpression(list);

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java
index 3b1af4f..2f0ac25 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java
@@ -29,7 +29,6 @@
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.expression.type.ITypeExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
 import org.apache.uima.ruta.rule.MatchContext;
 
 public class NullExpression extends FeatureExpression implements IStringExpression, ITypeExpression {
@@ -66,7 +65,7 @@
   }
 
   @Override
-  public TypeExpression getTypeExpr(MatchContext context, RutaStream stream) {
+  public ITypeExpression getTypeExpr(MatchContext context, RutaStream stream) {
     return null;
   }
 
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java
index 9ff7e52..29c3ca5 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanTypeExpression.java
@@ -21,18 +21,18 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 

 public class BooleanTypeExpression extends AbstractBooleanExpression {

 

-  private final TypeExpression e1;

+  private final ITypeExpression e1;

 

   private final String op;

 

-  private final TypeExpression e2;

+  private final ITypeExpression e2;

 

-  public BooleanTypeExpression(TypeExpression e1, String op, TypeExpression e2) {

+  public BooleanTypeExpression(ITypeExpression e1, String op, ITypeExpression e2) {

     super();

     this.e1 = e1;

     this.op = op;

@@ -57,7 +57,7 @@
     return false;

   }

 

-  public TypeExpression getFristExpression() {

+  public ITypeExpression getFristExpression() {

     return e1;

   }

 

@@ -65,7 +65,7 @@
     return op;

   }

 

-  public TypeExpression getSecondExpression() {

+  public ITypeExpression getSecondExpression() {

     return e2;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
index da5a076..1e0f09d 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
@@ -35,7 +35,6 @@
 import org.apache.uima.ruta.expression.MatchReference;

 import org.apache.uima.ruta.expression.NullExpression;

 import org.apache.uima.ruta.expression.type.ITypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.rule.AnnotationComparator;

 import org.apache.uima.ruta.rule.MatchContext;

 

@@ -110,7 +109,7 @@
     return typeExpr;

   }

 

-  public void setTypeExpr(TypeExpression typeExpr) {

+  public void setTypeExpr(ITypeExpression typeExpr) {

     this.typeExpr = typeExpr;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java
index 9b441f9..8a06e9b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/SimpleTypeListExpression.java
@@ -24,14 +24,14 @@
 

 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 

 public class SimpleTypeListExpression extends TypeListExpression {

 

-  private List<TypeExpression> list;

+  private List<ITypeExpression> list;

 

-  public SimpleTypeListExpression(List<TypeExpression> list) {

+  public SimpleTypeListExpression(List<ITypeExpression> list) {

     super();

     this.list = list;

   }

@@ -39,13 +39,13 @@
   @Override

   public List<Type> getList(MatchContext context, RutaStream stream) {

     List<Type> result = new ArrayList<Type>();

-    for (TypeExpression each : list) {

+    for (ITypeExpression each : list) {

       result.add(each.getType(context, stream));

     }

     return result;

   }

 

-  public List<TypeExpression> getList() {

+  public List<ITypeExpression> getList() {

     return list;

   }

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/TypeListVariableExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/TypeListVariableExpression.java
index 236f1ba..a11d6e9 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/TypeListVariableExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/TypeListVariableExpression.java
@@ -25,7 +25,7 @@
 import org.apache.uima.cas.Type;

 import org.apache.uima.ruta.RutaBlock;

 import org.apache.uima.ruta.RutaStream;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.MatchContext;

 

 public class TypeListVariableExpression extends TypeListExpression {

@@ -44,8 +44,8 @@
     List<Object> list = parent.getEnvironment().getVariableValue(var, List.class);

     List<Type> result = new ArrayList<Type>();

     for (Object each : list) {

-      if (each instanceof TypeExpression) {

-        result.add(((TypeExpression) each).getType(context, stream));

+      if (each instanceof ITypeExpression) {

+        result.add(((ITypeExpression) each).getType(context, stream));

       } else if (each instanceof Type) {

         result.add((Type) each);

       }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java
index f261f1b..aa306e7 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java
@@ -24,10 +24,10 @@
 
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.IRutaExpression;
-import org.apache.uima.ruta.expression.bool.AbstractBooleanExpression;
-import org.apache.uima.ruta.expression.number.AbstractNumberExpression;
-import org.apache.uima.ruta.expression.string.AbstractStringExpression;
-import org.apache.uima.ruta.expression.type.TypeExpression;
+import org.apache.uima.ruta.expression.bool.IBooleanExpression;
+import org.apache.uima.ruta.expression.number.INumberExpression;
+import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.expression.type.ITypeExpression;
 import org.apache.uima.ruta.rule.MatchContext;
 
 public class UntypedListExpression extends ListExpression<Object> {
@@ -44,16 +44,16 @@
     List<Object> result = new ArrayList<Object>();
     for (IRutaExpression each : list) {
       // TODO support arrays
-      if (each instanceof AbstractBooleanExpression) {
-        result.add(((AbstractBooleanExpression) each).getBooleanValue(context, stream));
-      } else if (each instanceof AbstractNumberExpression) {
-        result.add(((AbstractNumberExpression) each).getDoubleValue(context, stream));
-      } else if (each instanceof TypeExpression) {
-        result.add(((TypeExpression) each).getType(context, stream));
+      if (each instanceof IBooleanExpression) {
+        result.add(((IBooleanExpression) each).getBooleanValue(context, stream));
+      } else if (each instanceof INumberExpression) {
+        result.add(((INumberExpression) each).getDoubleValue(context, stream));
+      } else if (each instanceof ITypeExpression) {
+        result.add(((ITypeExpression) each).getType(context, stream));
       } else if (each instanceof ListExpression) {
         result.add(((ListExpression<?>) each).getList(context, stream));
-      } else if (each instanceof AbstractStringExpression) {
-        result.add(((AbstractStringExpression) each).getStringValue(context, stream));
+      } else if (each instanceof IStringExpression) {
+        result.add(((IStringExpression) each).getStringValue(context, stream));
       }
     }
     return result;
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/AbstractTypeExpression.java
similarity index 89%
rename from ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeExpression.java
rename to ruta-core/src/main/java/org/apache/uima/ruta/expression/type/AbstractTypeExpression.java
index abf6772..12a759c 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/AbstractTypeExpression.java
@@ -21,6 +21,6 @@
 

 import org.apache.uima.ruta.expression.string.AbstractStringExpression;

 

-public abstract class TypeExpression extends AbstractStringExpression implements ITypeExpression {

+public abstract class AbstractTypeExpression extends AbstractStringExpression implements ITypeExpression {

 

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeExpression.java
index 35eeab2..e207825 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/SimpleTypeExpression.java
@@ -24,7 +24,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.rule.MatchContext;

 

-public class SimpleTypeExpression extends TypeExpression {

+public class SimpleTypeExpression extends AbstractTypeExpression {

 

   private final String typeString;

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeFunctionExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeFunctionExpression.java
index 61cf90d..6a9cd6d 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeFunctionExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeFunctionExpression.java
@@ -19,6 +19,6 @@
 

 package org.apache.uima.ruta.expression.type;

 

-public abstract class TypeFunctionExpression extends TypeExpression {

+public abstract class TypeFunctionExpression extends AbstractTypeExpression {

 

 }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeVariableExpression.java b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeVariableExpression.java
index ab087e6..945d1de 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeVariableExpression.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeVariableExpression.java
@@ -24,7 +24,7 @@
 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.rule.MatchContext;

 

-public class TypeVariableExpression extends TypeExpression {

+public class TypeVariableExpression extends AbstractTypeExpression {

 

   private final String var;

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java b/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
index 48c04b8..235186b 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
@@ -33,7 +33,7 @@
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.AbstractStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 

 public class RutaExternalFactory {

 

@@ -89,7 +89,7 @@
     return null;

   }

 

-  public TypeExpression createExternalTypeFunction(Token id, List<RutaExpression> args)

+  public ITypeExpression createExternalTypeFunction(Token id, List<RutaExpression> args)

           throws RutaParseException {

     String name = id.getText();

     IRutaTypeFunctionExtension extension = typeFunctionExtensions.get(name);

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/rule/RegExpRule.java b/ruta-core/src/main/java/org/apache/uima/ruta/rule/RegExpRule.java
index 8e22d8b..e0dbbd6 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/rule/RegExpRule.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/rule/RegExpRule.java
@@ -48,20 +48,20 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.AbstractStringExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.utils.UIMAUtils;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class RegExpRule extends AbstractRule {

 

-  private Map<TypeExpression, INumberExpression> typeMap;

+  private Map<ITypeExpression, INumberExpression> typeMap;

 

   private IStringExpression regexpExpr;

 

-  private Map<TypeExpression, Map<IStringExpression, IRutaExpression>> featureAssignments;

+  private Map<ITypeExpression, Map<IStringExpression, IRutaExpression>> featureAssignments;

 

   public RegExpRule(AbstractStringExpression regexp,

-          Map<TypeExpression, INumberExpression> typeMap, int id, RutaBlock parent) {

+          Map<ITypeExpression, INumberExpression> typeMap, int id, RutaBlock parent) {

     super(parent, id);

     this.regexpExpr = regexp;

     this.typeMap = typeMap;

@@ -111,11 +111,11 @@
 

   private Map<Integer, Map<Type, Map<String, Object>>> getFeatureAssignmentMap(RutaStream stream) {

     Map<Integer, Map<Type, Map<String, Object>>> result = new HashMap<Integer, Map<Type, Map<String, Object>>>();

-    Set<Entry<TypeExpression, Map<IStringExpression, IRutaExpression>>> entrySet = featureAssignments

+    Set<Entry<ITypeExpression, Map<IStringExpression, IRutaExpression>>> entrySet = featureAssignments

             .entrySet();

     MatchContext context = new MatchContext(getParent());

-    for (Entry<TypeExpression, Map<IStringExpression, IRutaExpression>> entry : entrySet) {

-      TypeExpression key = entry.getKey();

+    for (Entry<ITypeExpression, Map<IStringExpression, IRutaExpression>> entry : entrySet) {

+      ITypeExpression key = entry.getKey();

       Type type = key.getType(context, stream);

       Map<IStringExpression, IRutaExpression> value = entry.getValue();

       INumberExpression cgExpr = typeMap.get(key);

@@ -143,8 +143,8 @@
 

   private Map<Integer, List<Type>> getGroup2Types(MatchContext context, RutaStream stream) {

     Map<Integer, List<Type>> groupTypes = new TreeMap<Integer, List<Type>>();

-    Set<Entry<TypeExpression, INumberExpression>> entrySet = typeMap.entrySet();

-    for (Entry<TypeExpression, INumberExpression> entry : entrySet) {

+    Set<Entry<ITypeExpression, INumberExpression>> entrySet = typeMap.entrySet();

+    for (Entry<ITypeExpression, INumberExpression> entry : entrySet) {

       Type type = entry.getKey().getType(context, stream);

       INumberExpression value = entry.getValue();

       int group = value == null ? 0 : value.getIntegerValue(context, stream);

@@ -224,9 +224,9 @@
                 }

               }

             } else {

-              if (argExpr instanceof TypeExpression

+              if (argExpr instanceof ITypeExpression

                       && range.getName().equals(UIMAConstants.TYPE_STRING)) {

-                TypeExpression typeExpr = (TypeExpression) argExpr;

+                ITypeExpression typeExpr = (ITypeExpression) argExpr;

                 List<AnnotationFS> annotationsInWindow = stream.getAnnotationsInWindow(afs,

                         typeExpr.getType(context, stream));

                 if (annotationsInWindow != null && !annotationsInWindow.isEmpty()) {

@@ -263,8 +263,8 @@
                       && range.getName().equals(UIMAConstants.TYPE_BOOLEAN)) {

                 afs.setBooleanValue(feature,

                         ((IBooleanExpression) argExpr).getBooleanValue(context, stream));

-              } else if (argExpr instanceof TypeExpression) {

-                TypeExpression typeExpr = (TypeExpression) argExpr;

+              } else if (argExpr instanceof ITypeExpression) {

+                ITypeExpression typeExpr = (ITypeExpression) argExpr;

                 List<AnnotationFS> annotationsInWindow = stream.getAnnotationsInWindow(afs,

                         typeExpr.getType(context, stream));

                 if (typeSystem.subsumes(jcas.getCasType(FSArray.type), range)) {

@@ -287,11 +287,11 @@
     return getParent().getEnvironment();

   }

 

-  public Map<TypeExpression, INumberExpression> getTypeMap() {

+  public Map<ITypeExpression, INumberExpression> getTypeMap() {

     return typeMap;

   }

 

-  public void setTypeMap(Map<TypeExpression, INumberExpression> typeMap) {

+  public void setTypeMap(Map<ITypeExpression, INumberExpression> typeMap) {

     this.typeMap = typeMap;

   }

 

@@ -303,11 +303,11 @@
     this.regexpExpr = regexp;

   }

 

-  public void setFeatureAssignments(Map<TypeExpression, Map<IStringExpression, IRutaExpression>> fa) {

+  public void setFeatureAssignments(Map<ITypeExpression, Map<IStringExpression, IRutaExpression>> fa) {

     this.featureAssignments = fa;

   }

 

-  public Map<TypeExpression, Map<IStringExpression, IRutaExpression>> getFeatureAssignments() {

+  public Map<ITypeExpression, Map<IStringExpression, IRutaExpression>> getFeatureAssignments() {

     return featureAssignments;

   }

 

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java
index d1d8998..674be32 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java
@@ -69,7 +69,7 @@
 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.resource.WordTableExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 

 public class ActionVerbalizer {

 

@@ -433,7 +433,7 @@
       return name + var + ", " + op + ")";

     } else if (action instanceof MarkTableAction) {

       MarkTableAction a = (MarkTableAction) action;

-      TypeExpression typeExpr = a.getTypeExpr();

+      ITypeExpression typeExpr = a.getTypeExpr();

       INumberExpression indexExpr = a.getIndexExpr();

       WordTableExpression tableExpr = a.getTableExpr();

       Map<IStringExpression, INumberExpression> featureMap = a.getFeatureMap();

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java
index 008647b..d29c673 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ExpressionVerbalizer.java
@@ -60,8 +60,8 @@
 import org.apache.uima.ruta.expression.string.SimpleStringExpression;

 import org.apache.uima.ruta.expression.string.StringFeatureExpression;

 import org.apache.uima.ruta.expression.string.StringVariableExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.expression.type.TypeVariableExpression;

 

 public class ExpressionVerbalizer {

@@ -76,8 +76,8 @@
   public String verbalize(IRutaExpression expression) {

     if (expression instanceof GenericFeatureExpression) {

       return verbalize(((GenericFeatureExpression) expression).getFeatureExpression());

-    } else if (expression instanceof TypeExpression) {

-      return verbalize((TypeExpression) expression);

+    } else if (expression instanceof ITypeExpression) {

+      return verbalize((ITypeExpression) expression);

     } else if (expression instanceof IBooleanExpression) {

       return verbalize((IBooleanExpression) expression);

     } else if (expression instanceof INumberExpression) {

@@ -209,8 +209,8 @@
       return "";

     } else if (expression instanceof INumberExpression) {

       return verbalize((INumberExpression) expression);

-    } else if (expression instanceof TypeExpression) {

-      return verbalize((TypeExpression) expression);

+    } else if (expression instanceof ITypeExpression) {

+      return verbalize((ITypeExpression) expression);

     } else if (expression instanceof IBooleanExpression) {

       return verbalize((IBooleanExpression) expression);

     } else if (expression instanceof ListExpression) {

@@ -248,7 +248,7 @@
     return expression.getClass().getSimpleName();

   }

 

-  public String verbalize(TypeExpression expression) {

+  public String verbalize(ITypeExpression expression) {

     if (expression == null) {

       return null;

     }

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
index 9105fb4..76722ff 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
@@ -33,7 +33,7 @@
 import org.apache.uima.ruta.expression.IRutaExpression;

 import org.apache.uima.ruta.expression.number.INumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.AbstractRuleElement;

 import org.apache.uima.ruta.rule.ComposedRuleElement;

 import org.apache.uima.ruta.rule.ConjunctRulesRuleElement;

@@ -294,10 +294,10 @@
     sb.append(regexp);

     sb.append(THEN);

 

-    Iterator<Entry<TypeExpression, INumberExpression>> iterator = rule.getTypeMap().entrySet()

+    Iterator<Entry<ITypeExpression, INumberExpression>> iterator = rule.getTypeMap().entrySet()

             .iterator();

     while (iterator.hasNext()) {

-      Entry<TypeExpression, INumberExpression> next = iterator.next();

+      Entry<ITypeExpression, INumberExpression> next = iterator.next();

       String type = verbalizer.verbalize(next.getKey());

       INumberExpression value = next.getValue();

       if (value != null) {

@@ -306,7 +306,7 @@
       } else {

         sb.append(type);

       }

-      Map<TypeExpression, Map<IStringExpression, IRutaExpression>> featureAssignments = rule

+      Map<ITypeExpression, Map<IStringExpression, IRutaExpression>> featureAssignments = rule

               .getFeatureAssignments();

       if (featureAssignments != null) {

         Map<IStringExpression, IRutaExpression> map = featureAssignments.get(next.getKey());

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
index 002a97e..3d597d5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
@@ -20,6 +20,7 @@
 package org.apache.uima.ruta.expression.annotation;

 

 import static org.junit.Assert.assertEquals;

+import static org.junit.Assert.assertNotNull;

 

 import java.util.ArrayList;

 import java.util.List;

@@ -75,6 +76,7 @@
     AnnotationFS next = iterator.next();

     assertEquals("text", next.getCoveredText());

     AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);

+    assertNotNull("Feature value is null!", a);

     assertEquals("Some", a.getCoveredText());

 

   }

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
index d1080ae..f1b97a0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
@@ -79,8 +79,8 @@
 import org.apache.uima.ruta.expression.string.AbstractStringExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

 import org.apache.uima.ruta.expression.string.SimpleStringExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.expression.type.TypeVariableExpression;

 import org.apache.uima.ruta.verbalize.RutaVerbalizer;

 import org.junit.Test;

@@ -91,13 +91,13 @@
   @Test

   public void test() {

     RutaVerbalizer v = new RutaVerbalizer();

-    List<TypeExpression> typeExprList = new ArrayList<TypeExpression>();

+    List<ITypeExpression> typeExprList = new ArrayList<ITypeExpression>();

     List<IStringExpression> stringExprList = new ArrayList<IStringExpression>();

     List<IRutaExpression> exprList = new ArrayList<IRutaExpression>();

     List<INumberExpression> indexes = new ArrayList<INumberExpression>();

     String var = "anyVar";

-    TypeExpression typeExpr1 = new SimpleTypeExpression("Type1");

-    TypeExpression typeExpr2 = new TypeVariableExpression("typeVar");

+    ITypeExpression typeExpr1 = new SimpleTypeExpression("Type1");

+    ITypeExpression typeExpr2 = new TypeVariableExpression("typeVar");

     typeExprList.add(typeExpr1);

     typeExprList.add(typeExpr2);

     INumberExpression numExpr1 = new SimpleNumberExpression(4);

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
index b424d7d..bdb06ad 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
@@ -63,8 +63,8 @@
 import org.apache.uima.ruta.expression.number.SimpleNumberExpression;

 import org.apache.uima.ruta.expression.string.IStringExpression;

 import org.apache.uima.ruta.expression.string.SimpleStringExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.expression.type.TypeVariableExpression;

 import org.apache.uima.ruta.verbalize.RutaVerbalizer;

 import org.junit.Test;

@@ -74,12 +74,12 @@
   @Test

   public void test() {

     RutaVerbalizer v = new RutaVerbalizer();

-    List<TypeExpression> typeExprList = new ArrayList<TypeExpression>();

+    List<ITypeExpression> typeExprList = new ArrayList<ITypeExpression>();

     List<IStringExpression> stringExprList = new ArrayList<IStringExpression>();

     String var = "anyVar";

     IStringExpression varExpr = new NumberVariableExpression(var);

-    TypeExpression typeExpr1 = new SimpleTypeExpression("Type1");

-    TypeExpression typeExpr2 = new TypeVariableExpression("typeVar");

+    ITypeExpression typeExpr1 = new SimpleTypeExpression("Type1");

+    ITypeExpression typeExpr2 = new TypeVariableExpression("typeVar");

     typeExprList.add(typeExpr1);

     typeExprList.add(typeExpr2);

     INumberExpression numExpr1 = new SimpleNumberExpression(4);

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
index 78d8538..633e3d0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
@@ -50,8 +50,8 @@
 import org.apache.uima.ruta.expression.string.IStringExpression;

 import org.apache.uima.ruta.expression.string.SimpleStringExpression;

 import org.apache.uima.ruta.expression.string.StringVariableExpression;

+import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.expression.type.SimpleTypeExpression;

-import org.apache.uima.ruta.expression.type.TypeExpression;

 import org.apache.uima.ruta.expression.type.TypeVariableExpression;

 import org.apache.uima.ruta.verbalize.RutaVerbalizer;

 import org.junit.Test;

@@ -97,8 +97,8 @@
 

     String s = null;

     String var = "anyVar";

-    TypeExpression typeExpr1 = new SimpleTypeExpression("Type1");

-    TypeExpression typeExpr2 = new TypeVariableExpression("typeVar");

+    ITypeExpression typeExpr1 = new SimpleTypeExpression("Type1");

+    ITypeExpression typeExpr2 = new TypeVariableExpression("typeVar");

 

     List<INumberExpression> numExprList1 = new ArrayList<INumberExpression>();

     List<INumberExpression> numExprList2 = new ArrayList<INumberExpression>();

@@ -206,7 +206,7 @@
     s = v.verbalize(nle2);

     assertEquals("anyVar", s);

 

-    List<TypeExpression> typeExprList = new ArrayList<TypeExpression>();

+    List<ITypeExpression> typeExprList = new ArrayList<ITypeExpression>();

     typeExprList.add(typeExpr1);

     typeExprList.add(typeExpr2);

     TypeListExpression tle1 = new SimpleTypeListExpression(typeExprList);