You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2016/09/29 12:55:42 UTC

svn commit: r1762762 [1/2] - in /uima/ruta/trunk: ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/ ruta-core/src/main/java/org/apache/uima/ruta/ ruta-core/src/main/java/org/apache/uima/ruta/action/ ruta-core/src/main/java/org/apache/uima/rut...

Author: pkluegl
Date: Thu Sep 29 12:55:41 2016
New Revision: 1762762

URL: http://svn.apache.org/viewvc?rev=1762762&view=rev
Log:
UIMA-5108
- refactoring
- cleanup
- support feature structures in matching

Modified:
    uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/BasicTypeConstraint.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotConstraint.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotMatchConstraint.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverter.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverterPSpan.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlVisitor.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaCutter.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaModifier.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/StyleMapFactory.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/ViewWriter.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberVariableExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/AnonymousWordList.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/CSVTable.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/MultiTreeWordList.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/ResourcePathResourceLoader.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TextNode.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TreeWordList.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AnnotationComparator.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ConjunctRulesRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElementCaretaker.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElementComparator.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElementIsolator.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatchComparator.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationMatcher.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaLiteralMatcher.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaMatcher.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaTypeMatcher.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/CreatedByVisitor.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoCollectorVisitor.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoFactory.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/InferenceCrowd.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/StatisticsVisitor.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/TimeProfilerVisitor.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/MarkFastWithFeatureProjectionTest.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java

Modified: uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java (original)
+++ uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/Automaton.java Thu Sep 29 12:55:41 2016
@@ -137,7 +137,7 @@ public class Automaton {
     for (RuleElement element : root.getPossibleTransitions()) {
       AbstractState targetState = root.getTransition(element);
       RutaMatcher matcher = ((RutaRuleElement) element).getMatcher();
-      for (AnnotationFS annoFS : matcher.getMatchingAnnotations(stream, parent)) {
+      for (AnnotationFS annoFS : matcher.getMatchingAnnotations(parent, stream)) {
         if (targetState instanceof TransitionState) {
           LinkedList<RuleMatch> ruleMatches = createMatches(annoFS,
                   ((TransitionState) targetState).getRules(), stream, crowd);
@@ -176,7 +176,7 @@ public class Automaton {
       RutaMatcher matcher = ((RutaRuleElement) element).getMatcher();
       AbstractState targetState = startState.getTransition(element);
       for (AnnotationFS annoFS : matcher.getAnnotationsAfter((RutaRuleElement) ruleElement, anno,
-              stream, parent)) {
+              parent, stream)) {
         if (targetState instanceof TransitionState) {
           LinkedList<RuleMatch> ruleMatches = filterMatches(annoFS, matches,
                   (TransitionState) targetState, stream, crowd);
@@ -236,15 +236,7 @@ public class Automaton {
     // boolean base = matcher.match(annotation, stream, getParent());
     boolean base = true;
     MatchContext context = new MatchContext(annotation, element, ruleMatch, true);
-    RutaMatcher matcher = ((RutaRuleElement) element).getMatcher();
-    if (matcher instanceof RutaTypeMatcher) {
-      RutaTypeMatcher rtm = (RutaTypeMatcher) matcher;
-      IRutaExpression expression = rtm.getExpression();
-      if (expression instanceof FeatureExpression) {
-        base = matcher.match(annotation, stream, element.getParent());
-      }
-    }
-    
+        
     List<AnnotationFS> textsMatched = new ArrayList<AnnotationFS>(1);
     if (annotation != null) {
       textsMatched.add(annotation);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Thu Sep 29 12:55:41 2016
@@ -433,6 +433,7 @@ public class RutaStream extends FSIterat
     return stream;
   }
 
+  @Override
   public FSIterator<AnnotationFS> copy() {
     RutaStream stream = new RutaStream(cas, basicType, beginAnchors, endAnchors, filter,
             lowMemoryProfile, simpleGreedyForComposed, crowd);
@@ -442,14 +443,17 @@ public class RutaStream extends FSIterat
     return stream;
   }
 
+  @Override
   public AnnotationFS get() throws NoSuchElementException {
     return currentIt.get();
   }
 
+  @Override
   public boolean isValid() {
     return currentIt.isValid();
   }
 
+  @Override
   public void moveTo(FeatureStructure fs) {
     try {
       currentIt.moveTo(fs);
@@ -458,18 +462,22 @@ public class RutaStream extends FSIterat
     }
   }
 
+  @Override
   public void moveToFirst() {
     currentIt.moveToFirst();
   }
 
+  @Override
   public void moveToLast() {
     currentIt.moveToLast();
   }
 
+  @Override
   public void moveToNext() {
     currentIt.moveToNext();
   }
 
+  @Override
   public void moveToPrevious() {
     currentIt.moveToPrevious();
   }
@@ -916,7 +924,7 @@ public class RutaStream extends FSIterat
               windowAnnotation.getBegin(), windowAnnotation.getEnd());
       FSIterator<AnnotationFS> subiterator = cas.getAnnotationIndex(type).subiterator(frame);
       while (subiterator.hasNext()) {
-        AnnotationFS each = (AnnotationFS) subiterator.next();
+        AnnotationFS each = subiterator.next();
         if (isVisible(each)) {
           result.add(each);
         }
@@ -1111,7 +1119,7 @@ public class RutaStream extends FSIterat
         List<AnnotationFS> featureAnnotations = inWindow;
         if (fe.getFeatures(context, this) != null) {
           featureAnnotations = new ArrayList<AnnotationFS>(
-                  sfe.getFeatureAnnotations(inWindow, this, context, false));
+                  sfe.getAnnotations(inWindow, false, context, this));
         }
         if (feature.getRange().isArray()) {
           annotation.setFeatureValue(feature,

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java Thu Sep 29 12:55:41 2016
@@ -75,8 +75,8 @@ public class ImplicitFeatureAction exten
     for (AnnotationFS each : annotations) {
       stream.getCas().removeFsFromIndexes(each);
     }
-    Collection<AnnotationFS> featureAnnotations = expr.getFeatureAnnotations(annotations, stream,
-            context, false);
+    Collection<? extends AnnotationFS> featureAnnotations = expr.getAnnotations(annotations, false,
+            context, stream);
     if (featureAnnotations.isEmpty()) {
       // null value in feature, but we require the host
       featureAnnotations = annotations;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/BeforeCondition.java Thu Sep 29 12:55:41 2016
@@ -65,7 +65,7 @@ public class BeforeCondition extends Typ
     boolean result = false;
     FSIterator<AnnotationFS> it = stream.getCas().getAnnotationIndex(t).iterator(annotation);
     while (it.isValid()) {
-      AnnotationFS a = (AnnotationFS) it.get();
+      AnnotationFS a = it.get();
       if (a.getEnd() >= annotation.getBegin()) {
         result = true;
         break;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java Thu Sep 29 12:55:41 2016
@@ -70,8 +70,8 @@ public class ImplicitCondition extends A
       } else if(annotationExpr!=null) {
         annotations.add(annotationExpr.getAnnotation(context, stream));
       }
-      Collection<AnnotationFS> featureAnnotations = fme.getFeatureAnnotations(annotations, stream,
-              context, true);
+      Collection<? extends AnnotationFS> featureAnnotations = fme.getAnnotations(annotations, true,
+              context, stream);
       return new EvaluatedCondition(this, !featureAnnotations.isEmpty());
     }
     return new EvaluatedCondition(this, false);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/BasicTypeConstraint.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/BasicTypeConstraint.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/BasicTypeConstraint.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/BasicTypeConstraint.java Thu Sep 29 12:55:41 2016
@@ -48,14 +48,17 @@ public class BasicTypeConstraint impleme
     }
   }
 
+  @Override
   public void add(Type type) {
     types.add(type);
   }
 
+  @Override
   public void add(String typeString) {
     throw new NotImplementedException();
   }
 
+  @Override
   public boolean match(FeatureStructure fs) {
     boolean result = false;
     if (fs instanceof RutaBasic) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotConstraint.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotConstraint.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotConstraint.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotConstraint.java Thu Sep 29 12:55:41 2016
@@ -32,6 +32,7 @@ public class NotConstraint implements FS
     this.constraint = constraint;
   }
 
+  @Override
   public boolean match(FeatureStructure fs) {
     return !constraint.match(fs);
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotMatchConstraint.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotMatchConstraint.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotMatchConstraint.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/constraint/NotMatchConstraint.java Thu Sep 29 12:55:41 2016
@@ -32,6 +32,7 @@ public class NotMatchConstraint implemen
     this.constraint = constraint;
   }
 
+  @Override
   public boolean match(FeatureStructure fs) {
     return !constraint.match(fs);
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java Thu Sep 29 12:55:41 2016
@@ -354,7 +354,7 @@ public class RutaDescriptorBuilder {
   private void fillTypeNameMap(Map<String, String> typeNameMap, TypeSystem typeSystem) {
     Iterator<Type> typeIterator = typeSystem.getTypeIterator();
     while (typeIterator.hasNext()) {
-      Type type = (Type) typeIterator.next();
+      Type type = typeIterator.next();
       String shortName = type.getShortName();
       String name = type.getName();
       typeNameMap.put(shortName, name);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverter.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverter.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverter.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverter.java Thu Sep 29 12:55:41 2016
@@ -323,7 +323,7 @@ public class HtmlConverter extends JCasA
       // check if view already exists:
       Iterator<JCas> viewIterator = jcas.getViewIterator();
       while (viewIterator.hasNext()) {
-        JCas jCas2 = (JCas) viewIterator.next();
+        JCas jCas2 = viewIterator.next();
         if (jCas2.getViewName().equals(modifiedViewName)) {
           modview = jCas2;
           getContext().getLogger().log(Level.WARNING,

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverterPSpan.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverterPSpan.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverterPSpan.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlConverterPSpan.java Thu Sep 29 12:55:41 2016
@@ -49,6 +49,7 @@ public class HtmlConverterPSpan implemen
     return end;
   }
 
+  @Override
   public int compareTo(HtmlConverterPSpan o) {
     if (this.begin == o.begin) {
       if (this.end == o.end) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlVisitor.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlVisitor.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlVisitor.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/HtmlVisitor.java Thu Sep 29 12:55:41 2016
@@ -54,6 +54,7 @@ public class HtmlVisitor extends NodeVis
     this.onlyContent = onlyContent;
   }
 
+  @Override
   public void visitTag(Tag tag) {
     String name = getName(tag);
     Type type = getType(name, cas);
@@ -83,6 +84,7 @@ public class HtmlVisitor extends NodeVis
     }
   }
 
+  @Override
   public void visitRemarkNode(Remark node) {
     Type type = getType("REMARK", cas);
     int begin = getBeginOffset(node);
@@ -93,11 +95,12 @@ public class HtmlVisitor extends NodeVis
     annotations.add(annotation);
   }
 
+  @Override
   public void visitEndTag(Tag tag) {
     String name = getName(tag);
     AnnotationFS found = null;
     for (int i = annotationStack.size() - 1; i >= 0; i--) {
-      AnnotationFS each = (AnnotationFS) annotationStack.get(i);
+      AnnotationFS each = annotationStack.get(i);
       Feature nameFeature = each.getType().getFeatureByBaseName("name");
       String eachName = each.getStringValue(nameFeature);
       if (name.equals(eachName)) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaCutter.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaCutter.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaCutter.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaCutter.java Thu Sep 29 12:55:41 2016
@@ -114,7 +114,7 @@ public class RutaCutter extends JCasAnno
       // check if view already exists:
       Iterator<JCas> viewIterator = jcas.getViewIterator();
       while (viewIterator.hasNext()) {
-        JCas jCas2 = (JCas) viewIterator.next();
+        JCas jCas2 = viewIterator.next();
         if (jCas2.getViewName().equals(outputViewName)) {
           modview = jCas2;
           getContext().getLogger().log(Level.WARNING,
@@ -137,7 +137,7 @@ public class RutaCutter extends JCasAnno
     if (keepType == null) {
       Iterator<Type> typeIterator = typeSystem.getTypeIterator();
       while (typeIterator.hasNext()) {
-        Type type = (Type) typeIterator.next();
+        Type type = typeIterator.next();
         String shortName = type.getShortName();
         if (shortName.equals(keep)) {
           keepType = type;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaModifier.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaModifier.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaModifier.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaModifier.java Thu Sep 29 12:55:41 2016
@@ -261,6 +261,7 @@ public class RutaModifier extends JCasAn
       }
     }
     Collections.sort(result, new Comparator<Type>() {
+      @Override
       public int compare(Type o1, Type o2) {
         return o1.getShortName().compareTo(o2.getShortName());
       }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/StyleMapFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/StyleMapFactory.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/StyleMapFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/StyleMapFactory.java Thu Sep 29 12:55:41 2016
@@ -164,7 +164,7 @@ public class StyleMapFactory {
       Boolean ck = e.getChecked();
       String ckString = ck.toString();
 
-      Boolean hid = (Boolean) Boolean.FALSE;
+      Boolean hid = Boolean.FALSE;
       String hidString = hid.toString();
       // this prevents hidden from being checked,
       // becasue that is not a meaningful combination
@@ -214,7 +214,7 @@ public class StyleMapFactory {
     if (color.startsWith("#")) {
       return Color.decode(color);
     } else {
-      String string = (String) colorNameMap.get(color);
+      String string = colorNameMap.get(color);
       if (string != null)
         return Color.decode(string);
       else
@@ -226,7 +226,7 @@ public class StyleMapFactory {
     if (color.startsWith("#")) {
       return Color.decode(color);
     } else {
-      String string = (String) colorNameMap.get(color);
+      String string = colorNameMap.get(color);
       if (string != null)
         return Color.decode(string);
       else

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/ViewWriter.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/ViewWriter.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/ViewWriter.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/ViewWriter.java Thu Sep 29 12:55:41 2016
@@ -154,10 +154,12 @@ public class ViewWriter extends JCasMult
     outView = null;
   }
 
+  @Override
   public boolean hasNext() throws AnalysisEngineProcessException {
     return false;
   }
 
+  @Override
   public AbstractCas next() throws AnalysisEngineProcessException {
     return null;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java Thu Sep 29 12:55:41 2016
@@ -84,8 +84,8 @@ public class AnnotationTypeExpression ex
                   .getBestGuessedAnnotationsAt(context.getAnnotation(), type);
           Collection<AnnotationFS> annotations = new ArrayList<>();
           annotations.addAll(bestGuessedAnnotationsAt);
-          Collection<AnnotationFS> featureAnnotations = getFeatureExpression()
-                  .getFeatureAnnotations(annotations, stream, context, false);
+          Collection<? extends AnnotationFS> featureAnnotations = getFeatureExpression()
+                  .getAnnotations(annotations, false, context, stream);
           if (featureAnnotations != null && !featureAnnotations.isEmpty()) {
             return featureAnnotations.iterator().next();
           }
@@ -143,8 +143,8 @@ public class AnnotationTypeExpression ex
         if (getFeatureExpression() != null) {
           List<AnnotationFS> bestGuessedAnnotationsAt = stream
                   .getBestGuessedAnnotationsAt(context.getAnnotation(), type);
-          Collection<AnnotationFS> featureAnnotations = getFeatureExpression()
-                  .getFeatureAnnotations(bestGuessedAnnotationsAt, stream, context, false);
+          Collection<? extends AnnotationFS> featureAnnotations = getFeatureExpression()
+                  .getAnnotations(bestGuessedAnnotationsAt, false, context, stream);
           return new ArrayList<>(featureAnnotations);
         } else {
           return stream.getAnnotationsByTypeInContext(type, context);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java Thu Sep 29 12:55:41 2016
@@ -149,6 +149,7 @@ public class MatchReference extends Ruta
     return featureExpression;
   }
 
+  @Override
   public String toString() {
     return reference;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/NullExpression.java Thu Sep 29 12:55:41 2016
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.uima.cas.Feature;
+import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaStream;
@@ -40,11 +41,17 @@ public class NullExpression extends Feat
   }
 
   @Override
-  public Collection<AnnotationFS> getFeatureAnnotations(Collection<AnnotationFS> annotations,
-          RutaStream stream, MatchContext context, boolean checkOnFeatureValue) {
+  public Collection<AnnotationFS> getAnnotations(Collection<? extends FeatureStructure> featureStructures, boolean checkOnFeatureValue,
+          MatchContext context, RutaStream stream) {
     return null;
   }
-
+  
+  @Override
+  public Collection<? extends FeatureStructure> getFeatureStructures(Collection<? extends FeatureStructure> featureStructures, boolean checkOnFeatureValue,
+          MatchContext context, RutaStream stream) {
+    return null;
+  }
+  
   @Override
   public Type getType(MatchContext context, RutaStream stream) {
     return null;
@@ -74,5 +81,6 @@ public class NullExpression extends Feat
   public AnnotationFS getAnnotation(MatchContext context, RutaStream stream) {
     return null;
   }
+
  
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -44,8 +44,8 @@ public class AnnotationFeatureExpression
   public AnnotationFS getAnnotation(MatchContext context, RutaStream stream) {
     AnnotationFS annotation = context.getAnnotation();
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     if (!featureAnnotations.isEmpty()) {
       AnnotationFS next = featureAnnotations.iterator().next();
         return next;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -45,8 +45,8 @@ public class AnnotationListFeatureExpres
   public List<AnnotationFS> getList(MatchContext context, RutaStream stream) {
     AnnotationFS annotation = context.getAnnotation();
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     return new ArrayList<AnnotationFS>(featureAnnotations);
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -42,8 +42,8 @@ public class BooleanFeatureExpression ex
     AnnotationFS annotation = context.getAnnotation();
     Feature feature = fe.getFeature(context, stream);
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     if (!featureAnnotations.isEmpty()) {
       AnnotationFS next = featureAnnotations.iterator().next();
       return next.getBooleanValue(feature);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanListFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -56,8 +56,8 @@ public class BooleanListFeatureExpressio
       return Collections.emptyList();
     }
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     List<Boolean> result = new ArrayList<>();
 
     for (AnnotationFS each : featureAnnotations) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.uima.cas.Feature;
+import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaStream;
@@ -37,9 +38,13 @@ public abstract class FeatureExpression
 
   public abstract List<String> getFeatureStringList(MatchContext context, RutaStream stream);
 
-  public abstract Collection<AnnotationFS> getFeatureAnnotations(
-          Collection<AnnotationFS> annotations, RutaStream stream, MatchContext context,
-          boolean checkOnFeatureValue);
+  public abstract Collection<? extends AnnotationFS> getAnnotations(
+          Collection<? extends FeatureStructure> featureStructures, boolean checkOnFeatureValue, MatchContext context,
+          RutaStream stream);
+  
+  public abstract Collection<? extends FeatureStructure> getFeatureStructures(
+          Collection<? extends FeatureStructure> featureStructures, boolean checkOnFeatureValue, MatchContext context,
+          RutaStream stream);
 
   public abstract Type getInitialType(MatchContext context, RutaStream stream);
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/FeatureMatchExpression.java Thu Sep 29 12:55:41 2016
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.uima.cas.Feature;
+import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.UIMAConstants;
@@ -69,12 +70,12 @@ public class FeatureMatchExpression exte
     this.op = op;
   }
 
-  public boolean checkFeatureValue(AnnotationFS afs, MatchContext context, RutaStream stream) {
+  public boolean checkFeatureValue(FeatureStructure fs, MatchContext context, RutaStream stream) {
     Feature feature = getFeature(context, stream);
-    return checkFeatureValue(afs, context, feature, stream);
+    return checkFeatureValue(fs, feature, context, stream);
   }
 
-  public boolean checkFeatureValue(AnnotationFS afs, MatchContext context, Feature feature,
+  public boolean checkFeatureValue(FeatureStructure fs, Feature feature, MatchContext context,
           RutaStream stream) {
     String rn = null;
     if(feature instanceof CoveredTextFeature) {
@@ -84,7 +85,7 @@ public class FeatureMatchExpression exte
     }
     
     if (rn.equals(UIMAConstants.TYPE_BOOLEAN)) {
-      Boolean v1 = afs.getBooleanValue(feature);
+      Boolean v1 = fs.getBooleanValue(feature);
       if (getArg() instanceof IBooleanExpression) {
         IBooleanExpression expr = (IBooleanExpression) getArg();
         Boolean v2 = expr.getBooleanValue(context, stream);
@@ -92,21 +93,21 @@ public class FeatureMatchExpression exte
       }
     } else if (rn.equals(UIMAConstants.TYPE_INTEGER) || rn.equals(UIMAConstants.TYPE_BYTE)
             || rn.equals(UIMAConstants.TYPE_SHORT) || rn.equals(UIMAConstants.TYPE_LONG)) {
-      Integer v1 = afs.getIntValue(feature);
+      Integer v1 = fs.getIntValue(feature);
       if (getArg() instanceof INumberExpression) {
         INumberExpression expr = (INumberExpression) getArg();
         Integer v2 = expr.getIntegerValue(context, stream);
         return compare(v1, v2);
       }
     } else if (rn.equals(UIMAConstants.TYPE_DOUBLE)) {
-      Double v1 = afs.getDoubleValue(feature);
+      Double v1 = fs.getDoubleValue(feature);
       if (getArg() instanceof INumberExpression) {
         INumberExpression expr = (INumberExpression) getArg();
         Double v2 = expr.getDoubleValue(context, stream);
         return compare(v1, v2);
       }
     } else if (rn.equals(UIMAConstants.TYPE_FLOAT)) {
-      Float v1 = afs.getFloatValue(feature);
+      Float v1 = fs.getFloatValue(feature);
       if (getArg() instanceof INumberExpression) {
         INumberExpression expr = (INumberExpression) getArg();
         Float v2 = expr.getFloatValue(context, stream);
@@ -115,10 +116,10 @@ public class FeatureMatchExpression exte
     } else if (rn.equals(UIMAConstants.TYPE_STRING)) {
       String v1 = null;
       // null is possibly coveredText
-      if(feature instanceof CoveredTextFeature) {
-        v1 = afs.getCoveredText();
+      if(feature instanceof CoveredTextFeature && fs instanceof AnnotationFS) {
+        v1 = ((AnnotationFS) fs).getCoveredText();
       } else if (feature != null) {
-        v1 = afs.getStringValue(feature);
+        v1 = fs.getStringValue(feature);
       }
       if (getArg() instanceof IStringExpression) {
         IStringExpression expr = (IStringExpression) getArg();
@@ -127,11 +128,11 @@ public class FeatureMatchExpression exte
       }
     } else if (!feature.getRange().isPrimitive() && getArg() instanceof FeatureExpression) {
       FeatureExpression fe = (FeatureExpression) getArg();
-      List<AnnotationFS> list = new ArrayList<AnnotationFS>(1);
-      list.add(afs);
-      Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-              false);
-      return compare(afs.getFeatureValue(feature), featureAnnotations);
+      List<FeatureStructure> list = new ArrayList<>(1);
+      list.add(fs);
+      Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+              stream);
+      return compare(fs.getFeatureValue(feature), featureAnnotations);
     }
     return false;
   }
@@ -185,6 +186,7 @@ public class FeatureMatchExpression exte
     return false;
   }
 
+  @Override
   public String toString() {
     String result = super.toString();
     if(op != null) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/LazyFeature.java Thu Sep 29 12:55:41 2016
@@ -19,8 +19,8 @@
 package org.apache.uima.ruta.expression.feature;
 
 import org.apache.uima.cas.Feature;
+import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.Type;
-import org.apache.uima.cas.text.AnnotationFS;
 
 public class LazyFeature implements Feature {
 
@@ -41,14 +41,8 @@ public class LazyFeature implements Feat
    return delegate;
   }
   
-  public Feature initialize(AnnotationFS annotation) {
-    if(annotation!= null) {
-      delegate = annotation.getType().getFeatureByBaseName(featureName);
-    } 
-    if(delegate == null) {
-      return this;
-    }
-    return delegate;
+  public Feature initialize(FeatureStructure featureStructure) {
+    return initialize(featureStructure.getType());
    }
   
   @Override

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/feature/SimpleFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -22,7 +22,6 @@ package org.apache.uima.ruta.expression.
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.TreeSet;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.uima.cas.Feature;
@@ -35,7 +34,6 @@ import org.apache.uima.ruta.UIMAConstant
 import org.apache.uima.ruta.expression.MatchReference;
 import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
 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.utils.IndexedReference;
 import org.apache.uima.ruta.utils.ParsingUtils;
@@ -44,8 +42,6 @@ public class SimpleFeatureExpression ext
 
   private MatchReference mr;
 
-  protected AnnotationComparator comparator = new AnnotationComparator();
-
   public SimpleFeatureExpression(MatchReference mr) {
     super();
     this.mr = mr;
@@ -59,8 +55,9 @@ public class SimpleFeatureExpression ext
       if (feature instanceof LazyFeature) {
         LazyFeature lazyFeature = (LazyFeature) feature;
         AnnotationFS annotation = context.getAnnotation();
-        List<AnnotationFS> targetAnnotation = getTargetAnnotation(annotation, this, context, stream);
-        if(targetAnnotation != null && !targetAnnotation.isEmpty()) {
+        List<AnnotationFS> targetAnnotation = getTargetAnnotation(annotation, this, context,
+                stream);
+        if (targetAnnotation != null && !targetAnnotation.isEmpty()) {
           annotation = targetAnnotation.get(0);
         }
         feature = lazyFeature.initialize(annotation);
@@ -88,7 +85,7 @@ public class SimpleFeatureExpression ext
         }
       } else if (StringUtils.equals(each, UIMAConstants.FEATURE_COVERED_TEXT)
               || StringUtils.equals(each, UIMAConstants.FEATURE_COVERED_TEXT_SHORT)) {
-        if(type != null) {
+        if (type != null) {
           feature = type.getFeatureByBaseName(each);
         }
         if (feature == null) {
@@ -101,8 +98,8 @@ public class SimpleFeatureExpression ext
       } else {
         feature = type.getFeatureByBaseName(each);
         if (feature == null) {
-          throw new IllegalArgumentException(
-                  "Not able to access feature " + each + " of type " + type.getName());
+          // type maybe not specific enough
+          feature = new LazyFeature(each);
         }
       }
       result.add(feature);
@@ -132,38 +129,64 @@ public class SimpleFeatureExpression ext
     return null;
   }
 
+  @Override
   public List<String> getFeatureStringList(MatchContext context, RutaStream stream) {
     return mr.getFeatureList();
   }
 
-  public Collection<AnnotationFS> getFeatureAnnotations(Collection<AnnotationFS> annotations,
-          RutaStream stream, MatchContext context, boolean checkOnFeatureValue) {
+  @Override
+  public Collection<? extends AnnotationFS> getAnnotations(
+          Collection<? extends FeatureStructure> featureStructures, boolean checkOnFeatureValue,
+          MatchContext context, RutaStream stream) {
 
-    Collection<AnnotationFS> result = new TreeSet<AnnotationFS>(comparator);
+    Collection<AnnotationFS> result = new ArrayList<>();
     List<Feature> features = getFeatures(context, stream);
     if (features != null && !features.isEmpty()) {
-      collectFeatureAnnotations(annotations, features, checkOnFeatureValue, result, stream,
-              context);
+      collectFeatureStructures(featureStructures, features, checkOnFeatureValue, true, result,
+              stream, context);
       return result;
     } else {
-      return annotations;
+      return filterAnnotations(featureStructures);
     }
   }
 
-  private void collectFeatureAnnotations(Collection<AnnotationFS> annotations,
-          List<Feature> features, boolean checkOnFeatureValue, Collection<AnnotationFS> result,
-          RutaStream stream, MatchContext context) {
-    for (AnnotationFS each : annotations) {
-      collectFeatureAnnotations(each, features, checkOnFeatureValue, result, stream, context);
+  @Override
+  public Collection<? extends FeatureStructure> getFeatureStructures(
+          Collection<? extends FeatureStructure> featureStructures, boolean checkOnFeatureValue,
+          MatchContext context, RutaStream stream) {
+    Collection<FeatureStructure> result = new ArrayList<>();
+    List<Feature> features = getFeatures(context, stream);
+    if (features != null && !features.isEmpty()) {
+      collectFeatureStructures(featureStructures, features, checkOnFeatureValue, false, result,
+              stream, context);
+      return result;
+    } else {
+      return featureStructures;
     }
   }
 
-  private void collectFeatureAnnotations(AnnotationFS annotation, List<Feature> features,
-          boolean checkOnFeatureValue, Collection<AnnotationFS> result, RutaStream stream,
-          MatchContext context) {
-    if (annotation == null) {
+  private <T> void collectFeatureStructures(Collection<? extends FeatureStructure> featureStructures,
+          List<Feature> features, boolean checkOnFeatureValue, boolean onlyAnnotations,
+          Collection<T> result, RutaStream stream, MatchContext context) {
+    for (FeatureStructure each : featureStructures) {
+      collectFeatureStructures(each, features, checkOnFeatureValue, onlyAnnotations, null, result,
+              stream, context);
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  private <T> void collectFeatureStructures(FeatureStructure featureStructure, List<Feature> features,
+          boolean checkOnFeatureValue, boolean collectOnlyAnnotations,
+          T lastValidFeatureStructure, Collection<T> result,
+          RutaStream stream, MatchContext context) {
+    if (featureStructure == null) {
       return;
     }
+    if (!collectOnlyAnnotations) {
+      lastValidFeatureStructure = (T) featureStructure;
+    } else if (featureStructure instanceof AnnotationFS) {
+      lastValidFeatureStructure = (T) featureStructure;
+    }
 
     Feature currentFeature = null;
     List<Feature> tail = null;
@@ -172,10 +195,10 @@ public class SimpleFeatureExpression ext
       currentFeature = features.get(0);
       if (currentFeature instanceof LazyFeature) {
         LazyFeature lazyFeature = (LazyFeature) currentFeature;
-        Feature delegate = lazyFeature.initialize(annotation);
+        Feature delegate = lazyFeature.initialize(featureStructure);
         if (delegate == null) {
           throw new RuntimeException("Invalid feature! Feature '" + lazyFeature.getFeatureName()
-                  + "' is not defined for type '" + annotation.getType() + "'.");
+                  + "' is not defined for type '" + featureStructure.getType() + "'.");
         } else {
           currentFeature = delegate;
         }
@@ -189,33 +212,35 @@ public class SimpleFeatureExpression ext
       if (this instanceof FeatureMatchExpression) {
         FeatureMatchExpression fme = (FeatureMatchExpression) this;
         if (checkOnFeatureValue) {
-          if (fme.checkFeatureValue(annotation, context, currentFeature, stream)) {
-            result.add(annotation);
+          if (fme.checkFeatureValue(featureStructure, currentFeature, context, stream)) {
+            result.add(lastValidFeatureStructure);
           }
         } else {
-          result.add(annotation);
+          result.add(lastValidFeatureStructure);
         }
       } else {
-        result.add(annotation);
+        result.add(lastValidFeatureStructure);
       }
     } else {
-      collectFeatureAnnotations(annotation, currentFeature, tail, checkOnFeatureValue, result,
-              stream, context);
+      collectFeatureStructures(featureStructure, currentFeature, tail, checkOnFeatureValue,
+              collectOnlyAnnotations, lastValidFeatureStructure, result, stream, context);
     }
   }
 
-  private void collectFeatureAnnotations(AnnotationFS annotation, Feature currentFeature,
-          List<Feature> tail, boolean checkOnFeatureValue, Collection<AnnotationFS> result,
-          RutaStream stream, MatchContext context) {
+  private <T> void collectFeatureStructures(FeatureStructure featureStructure, Feature currentFeature,
+          List<Feature> tail, boolean checkOnFeatureValue, boolean collectOnlyAnnotations,
+          T lastValidFeatureStructure, Collection<T> result, RutaStream stream,
+          MatchContext context) {
+
     // stop early for match expressions
     if (this instanceof FeatureMatchExpression && (tail == null || tail.isEmpty())) {
       FeatureMatchExpression fme = (FeatureMatchExpression) this;
       if (checkOnFeatureValue) {
-        if (fme.checkFeatureValue(annotation, context, currentFeature, stream)) {
-          result.add(annotation);
+        if (fme.checkFeatureValue(featureStructure, currentFeature, context, stream)) {
+          result.add(lastValidFeatureStructure);
         }
       } else {
-        result.add(annotation);
+        result.add(lastValidFeatureStructure);
       }
       return;
     }
@@ -227,32 +252,35 @@ public class SimpleFeatureExpression ext
       index = indexedFeature.getIndex();
     }
 
-    FeatureStructure value = annotation.getFeatureValue(currentFeature);
+    FeatureStructure value = featureStructure.getFeatureValue(currentFeature);
     if (value instanceof AnnotationFS) {
       AnnotationFS next = (AnnotationFS) value;
-      collectFeatureAnnotations(next, tail, checkOnFeatureValue, result, stream, context);
+      collectFeatureStructures(next, tail, checkOnFeatureValue, collectOnlyAnnotations,
+              lastValidFeatureStructure, result, stream, context);
     } else if (value instanceof FSArray && index >= 0) {
       FSArray array = (FSArray) value;
       if (index < array.size()) {
         FeatureStructure fs = array.get(index);
         if (fs instanceof AnnotationFS) {
           AnnotationFS next = (AnnotationFS) fs;
-          collectFeatureAnnotations(next, tail, checkOnFeatureValue, result, stream, context);
+          collectFeatureStructures(next, tail, checkOnFeatureValue, collectOnlyAnnotations,
+                  lastValidFeatureStructure, result, stream, context);
         }
       }
     } else if (value instanceof FSArray) {
       FSArray array = (FSArray) value;
       for (int i = 0; i < array.size(); i++) {
-        // TODO: also feature structures or only annotations?
         FeatureStructure fs = array.get(i);
-        if (fs instanceof AnnotationFS) {
-          AnnotationFS next = (AnnotationFS) fs;
-          collectFeatureAnnotations(next, tail, checkOnFeatureValue, result, stream, context);
-        }
+        collectFeatureStructures(fs, tail, checkOnFeatureValue, collectOnlyAnnotations,
+                lastValidFeatureStructure, result, stream, context);
       }
+    } else if (value != null && !value.getType().isPrimitive()) {
+      // feature structure feature values
+      collectFeatureStructures(value, tail, checkOnFeatureValue, collectOnlyAnnotations,
+              lastValidFeatureStructure, result, stream, context);
     } else if (value != null) {
-      result.add(annotation);
       // primitive? -> return last annotation for further processing
+      result.add(lastValidFeatureStructure);
       // throw new IllegalArgumentException(value.getType()
       // + " is not supported in a feature match expression (" + mr.getMatch() + ").");
     }
@@ -262,8 +290,21 @@ public class SimpleFeatureExpression ext
     return mr;
   }
 
+  @Override
   public String toString() {
     return mr.getMatch();
   }
 
+  private Collection<AnnotationFS> filterAnnotations(
+          Collection<? extends FeatureStructure> featureStructures) {
+    Collection<AnnotationFS> result = new ArrayList<>(featureStructures.size());
+
+    for (FeatureStructure featureStructure : featureStructures) {
+      if (featureStructure instanceof AnnotationFS) {
+        result.add((AnnotationFS) featureStructure);
+      }
+    }
+    return result;
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java Thu Sep 29 12:55:41 2016
@@ -36,6 +36,7 @@ public class ComposedNumberExpression ex
     this.ops = ops;
   }
 
+  @Override
   public double getDoubleValue(MatchContext context, RutaStream stream) {
     INumberExpression numberExpression = getExpressions().get(0);
     if (numberExpression == null) {
@@ -52,6 +53,7 @@ public class ComposedNumberExpression ex
     return result;
   }
 
+  @Override
   public float getFloatValue(MatchContext context, RutaStream stream) {
     INumberExpression numberExpression = getExpressions().get(0);
     if (numberExpression == null) {
@@ -68,6 +70,7 @@ public class ComposedNumberExpression ex
     return result;
   }
 
+  @Override
   public int getIntegerValue(MatchContext context, RutaStream stream) {
     int result = getExpressions().get(0).getIntegerValue(context, stream);
     for (int i = 0; i < getOperators().size(); i++) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NegativeNumberExpression.java Thu Sep 29 12:55:41 2016
@@ -31,18 +31,22 @@ public class NegativeNumberExpression ex
     this.ne = simpleNumberExpression;
   }
 
+  @Override
   public double getDoubleValue(MatchContext context, RutaStream stream) {
     return -ne.getDoubleValue(context, stream);
   }
 
+  @Override
   public float getFloatValue(MatchContext context, RutaStream stream) {
     return -ne.getFloatValue(context, stream);
   }
 
+  @Override
   public int getIntegerValue(MatchContext context, RutaStream stream) {
     return -ne.getIntegerValue(context, stream);
   }
 
+  @Override
   public String getStringValue(MatchContext context, RutaStream stream) {
     return "-" + ne.getStringValue(context, stream);
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -39,16 +39,19 @@ public class NumberFeatureExpression ext
     this.fe = fe;
   }
 
+  @Override
   public int getIntegerValue(MatchContext context, RutaStream stream) {
     Number v = getNumberValue(context, stream);
     return v == null ? 0 : v.intValue();
   }
 
+  @Override
   public double getDoubleValue(MatchContext context, RutaStream stream) {
     Number v = getNumberValue(context, stream);
     return v == null ? 0 : v.doubleValue();
   }
 
+  @Override
   public float getFloatValue(MatchContext context, RutaStream stream) {
     Number v = getNumberValue(context, stream);
     return v == null ? 0 : v.floatValue();
@@ -58,8 +61,8 @@ public class NumberFeatureExpression ext
     AnnotationFS annotation = context.getAnnotation();
     Number result = null;
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     if (!featureAnnotations.isEmpty()) {
       Feature feature = fe.getFeature(context, stream);
       Type range = feature.getRange();

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberListFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -58,8 +58,8 @@ public class NumberListFeatureExpression
       return Collections.emptyList();
     }
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     List<Number> result = new ArrayList<>();
 
     for (AnnotationFS each : featureAnnotations) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberVariableExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/NumberVariableExpression.java Thu Sep 29 12:55:41 2016
@@ -32,6 +32,7 @@ public class NumberVariableExpression ex
     this.var = var;
   }
 
+  @Override
   public double getDoubleValue(MatchContext context, RutaStream stream) {
     RutaBlock parent = context.getParent();
     Object value = parent.getEnvironment().getVariableValue(getVar(), stream);
@@ -42,6 +43,7 @@ public class NumberVariableExpression ex
     return variableValue;
   }
 
+  @Override
   public float getFloatValue(MatchContext context, RutaStream stream) {
     RutaBlock parent = context.getParent();
     Object value = parent.getEnvironment().getVariableValue(getVar(), stream);
@@ -52,6 +54,7 @@ public class NumberVariableExpression ex
     return variableValue;
   }
 
+  @Override
   public int getIntegerValue(MatchContext context, RutaStream stream) {
     RutaBlock parent = context.getParent();
     Object value = parent.getEnvironment().getVariableValue(getVar(), stream);
@@ -62,6 +65,7 @@ public class NumberVariableExpression ex
     return variableValue;
   }
 
+  @Override
   public String getStringValue(MatchContext context, RutaStream stream) {
     RutaBlock parent = context.getParent();
     Class<?> variableType = parent.getEnvironment().getVariableType(getVar());

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/SimpleNumberExpression.java Thu Sep 29 12:55:41 2016
@@ -31,14 +31,17 @@ public class SimpleNumberExpression exte
     this.number = number;
   }
 
+  @Override
   public double getDoubleValue(MatchContext context, RutaStream stream) {
     return number.doubleValue();
   }
 
+  @Override
   public float getFloatValue(MatchContext context, RutaStream stream) {
     return number.floatValue();
   }
 
+  @Override
   public int getIntegerValue(MatchContext context, RutaStream stream) {
     return number.intValue();
   }
@@ -47,6 +50,7 @@ public class SimpleNumberExpression exte
     return number;
   }
 
+  @Override
   public String getStringValue(MatchContext context, RutaStream stream) {
     boolean floating = number.intValue() != number.doubleValue();
     if (floating) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/SimpleStringExpression.java Thu Sep 29 12:55:41 2016
@@ -48,6 +48,7 @@ public class SimpleStringExpression exte
     return value;
   }
 
+  @Override
   public String toString() {
     return value;
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -43,8 +43,8 @@ public class StringFeatureExpression ext
     AnnotationFS annotation = context.getAnnotation();
     Feature feature = fe.getFeature(context, stream);
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     if (!featureAnnotations.isEmpty()) {
       AnnotationFS next = featureAnnotations.iterator().next();
       if (feature instanceof CoveredTextFeature) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/string/StringListFeatureExpression.java Thu Sep 29 12:55:41 2016
@@ -56,8 +56,8 @@ public class StringListFeatureExpression
       return Collections.emptyList();
     }
     List<AnnotationFS> list = getTargetAnnotation(annotation, fe, context, stream);
-    Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
-            false);
+    Collection<? extends AnnotationFS> featureAnnotations = fe.getAnnotations(list, false, context,
+            stream);
     List<String> result = new ArrayList<>();
 
     for (AnnotationFS each : featureAnnotations) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/AnonymousWordList.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/AnonymousWordList.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/AnonymousWordList.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/AnonymousWordList.java Thu Sep 29 12:55:41 2016
@@ -36,16 +36,19 @@ public class AnonymousWordList implement
     this.list = strings;
   }
 
+  @Override
   public boolean contains(String s, boolean ignoreCase, int size, char[] ignoreChars,
           int maxIgnoreChars, boolean ignoreWS) {
     return list.contains(s);
   }
 
+  @Override
   public boolean containsFragment(String s, boolean ignoreCase, int size, char[] ignoreChars,
           int maxIgnoreChars, boolean ignoreWS) {
     return contains(s, ignoreCase, size, ignoreChars, maxIgnoreChars, ignoreWS);
   }
 
+  @Override
   public List<AnnotationFS> find(RutaStream stream, boolean ignoreCase, int size,
           char[] ignoreToken, int maxIgnoredTokens, boolean ignoreWS) {
     List<AnnotationFS> result = new ArrayList<AnnotationFS>();
@@ -61,16 +64,19 @@ public class AnonymousWordList implement
     return result;
   }
 
+  @Override
   public List<AnnotationFS> find(RutaStream stream, Map<String, Object> typeMap,
           boolean ignoreCase, int ignoreLength, boolean edit, double distance, String ignoreToken) {
     return new ArrayList<AnnotationFS>();
   }
 
+  @Override
   public List<String> contains(String string, boolean ignoreCase, int ignoreLength, boolean edit,
           double distance, String ignoreToken) {
     return null;
   }
 
+  @Override
   public List<String> containsFragment(String string, boolean ignoreCase, int ignoreLength,
           boolean edit, double distance, String ignoreToken) {
     return null;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/CSVTable.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/CSVTable.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/CSVTable.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/CSVTable.java Thu Sep 29 12:55:41 2016
@@ -82,6 +82,7 @@ public class CSVTable implements RutaTab
     sc.close();
   }
 
+  @Override
   public RutaWordList getWordList(int index, RutaBlock parent) {
     RutaWordList list = columnWordLists.get(index);
     if (list == null) {
@@ -110,10 +111,12 @@ public class CSVTable implements RutaTab
     return result;
   }
 
+  @Override
   public String getEntry(int row, int column) {
     return tableData.get(row).get(column);
   }
 
+  @Override
   public List<String> getRowWhere(int column, String value) {
     List<String> columnData = getColumnData(column);
     int i = 0;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/MultiTreeWordList.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/MultiTreeWordList.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/MultiTreeWordList.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/MultiTreeWordList.java Thu Sep 29 12:55:41 2016
@@ -404,6 +404,7 @@ public class MultiTreeWordList implement
    * @return Returns a list of types which belong to a string.
    */
 
+  @Override
   public List<String> contains(String string, boolean ignoreCase, int ignoreLength, boolean edit,
           double distance, String ignoreToken) {
 
@@ -482,6 +483,7 @@ public class MultiTreeWordList implement
    *          The maximum number of ignored characters.
    * @return true, if TreeWordList contains the string, false otherwise.
    */
+  @Override
   public boolean contains(String s, boolean ignoreCase, int size, char[] ignoreChars,
           int maxIgnoreChars, boolean ignoreWS) {
 
@@ -509,6 +511,7 @@ public class MultiTreeWordList implement
    *          The maximum number of ignored characters.
    * @return true, if TreeWordList contains a prefix of the string, false otherwise.
    */
+  @Override
   public boolean containsFragment(String s, boolean ignoreCase, int size, char[] ignoreChars,
           int maxIgnoreChars, boolean ignoreWS) {
     MultiTextNode pointer = root;
@@ -562,6 +565,7 @@ public class MultiTreeWordList implement
    * @return A list of types which belong to a prefix of a string that is contained by the
    *         MultiTreeWordList.
    */
+  @Override
   public List<String> containsFragment(String string, boolean ignoreCase, int ignoreLength,
           boolean edit, double distance, String ignoreToken) {
 
@@ -788,6 +792,7 @@ public class MultiTreeWordList implement
     }
   }
 
+  @Override
   public Collection<AnnotationFS> find(RutaStream stream, Map<String, Object> typeMap,
           boolean ignoreCase, int ignoreLength, boolean edit, double distance, String ignoreToken) {
 
@@ -862,6 +867,7 @@ public class MultiTreeWordList implement
     return results;
   }
 
+  @Override
   public List<AnnotationFS> find(RutaStream stream, boolean ignoreCase, int size,
           char[] ignoreChars, int maxIgnoredChars, boolean ignoreWS) {
     assert false;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/ResourcePathResourceLoader.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/ResourcePathResourceLoader.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/ResourcePathResourceLoader.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/ResourcePathResourceLoader.java Thu Sep 29 12:55:41 2016
@@ -40,6 +40,7 @@ public class ResourcePathResourceLoader
     this.resourcePaths = resourcePaths;
   }
 
+  @Override
   public Resource getResource(String location) {
     if (resourcePaths != null) {
       for (String parent : resourcePaths) {
@@ -53,6 +54,7 @@ public class ResourcePathResourceLoader
     return new DescriptiveResource(location + " was not found in resource paths");
   }
 
+  @Override
   public ClassLoader getClassLoader() {
     return getClass().getClassLoader();
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TextNode.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TextNode.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TextNode.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TextNode.java Thu Sep 29 12:55:41 2016
@@ -77,6 +77,7 @@ public class TextNode {
     return this.children;
   }
 
+  @Override
   public String toString() {
     return value + (isWordEnd ? "+" : "");
   }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TreeWordList.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TreeWordList.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TreeWordList.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/resource/TreeWordList.java Thu Sep 29 12:55:41 2016
@@ -199,6 +199,7 @@ public class TreeWordList implements Rut
     pointer.setWordEnd(s.length() > 0);
   }
 
+  @Override
   public boolean contains(String s, boolean ignoreCase, int size, char[] ignoreChars,
           int maxIgnoreChars, boolean ignoreWS) {
     if (s == null) {
@@ -209,6 +210,7 @@ public class TreeWordList implements Rut
             maxIgnoreChars, ignoreWS);
   }
 
+  @Override
   public boolean containsFragment(String s, boolean ignoreCase, int size, char[] ignoreChars,
           int maxIgnoreChars, boolean ignoreWS) {
     TextNode pointer = root;
@@ -303,6 +305,7 @@ public class TreeWordList implements Rut
     return null;
   }
 
+  @Override
   public List<AnnotationFS> find(RutaStream stream, boolean ignoreCase, int size,
           char[] ignoreChars, int maxIgnoredChars, boolean ignoreWS) {
     ArrayList<AnnotationFS> results = new ArrayList<AnnotationFS>();
@@ -463,16 +466,19 @@ public class TreeWordList implements Rut
     return name;
   }
 
+  @Override
   public List<AnnotationFS> find(RutaStream stream, Map<String, Object> typeMap,
           boolean ignoreCase, int ignoreLength, boolean edit, double distance, String ignoreToken) {
     return null;
   }
 
+  @Override
   public List<String> contains(String string, boolean ignoreCase, int ignoreLength, boolean edit,
           double distance, String ignoreToken) {
     return null;
   }
 
+  @Override
   public List<String> containsFragment(String string, boolean ignoreCase, int ignoreLength,
           boolean edit, double distance, String ignoreToken) {
     return null;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AnnotationComparator.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AnnotationComparator.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AnnotationComparator.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AnnotationComparator.java Thu Sep 29 12:55:41 2016
@@ -34,6 +34,7 @@ public class AnnotationComparator implem
    * 
    * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
    */
+  @Override
   public int compare(AnnotationFS o1, AnnotationFS o2) {
     if (o1.getBegin() < o2.getBegin()) {
       return -1;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java Thu Sep 29 12:55:41 2016
@@ -58,11 +58,13 @@ public class ComposedRuleElement extends
     this.caretaker = new RuleElementCaretaker(this);
   }
 
+  @Override
   public void apply(RuleMatch match, RutaStream symbolStream, InferenceCrowd crowd) {
     applyRuleElements(match, symbolStream, crowd);
     super.apply(match, symbolStream, crowd);
   }
 
+  @Override
   public List<RuleMatch> startMatch(RuleMatch ruleMatch, RuleApply ruleApply,
           ComposedRuleElementMatch containerMatch, RuleElement entryPoint, RutaStream stream,
           InferenceCrowd crowd) {
@@ -176,6 +178,7 @@ public class ComposedRuleElement extends
     return composedMatch;
   }
 
+  @Override
   public List<RuleMatch> continueMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
           RuleApply ruleApply, ComposedRuleElementMatch containerMatch,
           RutaRuleElement sideStepOrigin, RuleElement entryPoint, RutaStream stream,
@@ -353,6 +356,7 @@ public class ComposedRuleElement extends
     return result;
   }
 
+  @Override
   public List<RuleMatch> continueOwnMatch(boolean after, AnnotationFS annotation,
           RuleMatch ruleMatch, RuleApply ruleApply, ComposedRuleElementMatch containerMatch,
           RutaRuleElement sideStepOrigin, RuleElement entryPoint, RutaStream stream,
@@ -564,12 +568,14 @@ public class ComposedRuleElement extends
     match.setInlinedRulesMatched(inlinedRulesMatched);
   }
 
-  public Collection<AnnotationFS> getAnchors(RutaStream stream) {
+  @Override
+  public Collection<? extends AnnotationFS> getAnchors(RutaStream stream) {
     RuleElement anchorElement = getAnchoringRuleElement(stream);
-    Collection<AnnotationFS> anchors = anchorElement.getAnchors(stream);
+    Collection<? extends AnnotationFS> anchors = anchorElement.getAnchors(stream);
     return anchors;
   }
 
+  @Override
   public long estimateAnchors(RutaStream stream) {
     long result = 1;
     for (RuleElement each : elements) {
@@ -583,10 +589,12 @@ public class ComposedRuleElement extends
     return result;
   }
 
+  @Override
   public RuleElement getAnchoringRuleElement(RutaStream stream) {
     return caretaker.getAnchoringRuleElement(stream);
   }
 
+  @Override
   public List<RuleElement> getRuleElements() {
     return elements;
   }
@@ -595,18 +603,22 @@ public class ComposedRuleElement extends
     this.elements = elements;
   }
 
+  @Override
   public RuleElement getFirstElement() {
     return caretaker.getFirstElement();
   }
 
+  @Override
   public RuleElement getLastElement() {
     return caretaker.getLastElement();
   }
 
+  @Override
   public void applyRuleElements(RuleMatch ruleMatch, RutaStream stream, InferenceCrowd crowd) {
     caretaker.applyRuleElements(ruleMatch, stream, crowd);
   }
 
+  @Override
   public String toString() {
     String con = "";
     if (conjunct != null) {
@@ -620,6 +632,7 @@ public class ComposedRuleElement extends
     ;
   }
 
+  @Override
   public RuleElement getNextElement(boolean after, RuleElement ruleElement) {
     // return caretaker.getNextElement(after, ruleElement);
     if (conjunct == null || this.equals(ruleElement)) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java Thu Sep 29 12:55:41 2016
@@ -41,7 +41,7 @@ public class ComposedRuleElementMatch ex
           ComposedRuleElementMatch containerMatch) {
     super(ruleElement, containerMatch);
     baseConditionMatched = false;
-    ComposedRuleElement cre = (ComposedRuleElement) ruleElement;
+    ComposedRuleElement cre = ruleElement;
     innerMatches = new TreeMap<RuleElement, List<RuleElementMatch>>(new RuleElementComparator(cre));
     List<RuleElement> ruleElements = cre.getRuleElements();
     for (RuleElement eachRuleElement : ruleElements) {
@@ -107,6 +107,7 @@ public class ComposedRuleElementMatch ex
     }
   }
 
+  @Override
   public ComposedRuleElementMatch copy() {
     ComposedRuleElementMatch copy = new ComposedRuleElementMatch((ComposedRuleElement) ruleElement,
             containerMatch);
@@ -262,10 +263,12 @@ public class ComposedRuleElementMatch ex
     enforceUpdate();
   }
 
+  @Override
   public String toString() {
     return "CREM" + innerMatches.toString();
   }
 
+  @Override
   public List<AnnotationFS> getTextsMatched() {
     if (!textsMatchedUpdated || textsMatched == null) {
       Collection<AnnotationFS> set = new TreeSet<AnnotationFS>(new AnnotationComparator());

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ConjunctRulesRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ConjunctRulesRuleElement.java?rev=1762762&r1=1762761&r2=1762762&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ConjunctRulesRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ConjunctRulesRuleElement.java Thu Sep 29 12:55:41 2016
@@ -39,6 +39,7 @@ public class ConjunctRulesRuleElement ex
     this.elements = elements;
   }
 
+  @Override
   public List<RuleMatch> startMatch(RuleMatch ruleMatch, RuleApply ruleApply,
           ComposedRuleElementMatch containerMatch, RuleElement entryPoint, RutaStream stream,
           InferenceCrowd crowd) {
@@ -73,6 +74,7 @@ public class ConjunctRulesRuleElement ex
     return result;
   }
 
+  @Override
   public List<RuleMatch> continueMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
           RuleApply ruleApply, ComposedRuleElementMatch containerMatch,
           RutaRuleElement sideStepOrigin, RuleElement entryPoint, RutaStream stream,
@@ -80,6 +82,7 @@ public class ConjunctRulesRuleElement ex
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public List<RuleMatch> continueOwnMatch(boolean after, AnnotationFS annotation,
           RuleMatch ruleMatch, RuleApply ruleApply, ComposedRuleElementMatch containerMatch,
           RutaRuleElement sideStepOrigin, RuleElement entryPoint, RutaStream stream,
@@ -87,34 +90,42 @@ public class ConjunctRulesRuleElement ex
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public Collection<AnnotationFS> getAnchors(RutaStream symbolStream) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public long estimateAnchors(RutaStream stream) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public List<RuleElement> getRuleElements() {
     return elements;
   }
 
+  @Override
   public RuleElement getFirstElement() {
     return null;
   }
 
+  @Override
   public RuleElement getLastElement() {
     return null;
   }
 
+  @Override
   public RuleElement getAnchoringRuleElement(RutaStream stream) {
     return null;
   }
 
+  @Override
   public RuleElement getNextElement(boolean after, RuleElement ruleElement) {
     return null;
   }
 
+  @Override
   public boolean hasAncestor(boolean after) {
     return false;
   }