}
private AnnotationFS getNextPositionForComposed(ComposedRuleElement cre, boolean after,
AnnotationFS annotation, RutaStream stream) {
RuleElement element = getNextAtomicRuleElement(cre, after);
AnnotationFS result = null;
Boolean conjunct = cre.getConjunct();
if (element instanceof WildCardRuleElement) {
if (after) {
return stream.getAnchor(after, annotation.getEnd());
} else {
return stream.getAnchor(after, annotation.getBegin());
}
} else if(conjunct != null && !conjunct){
// disjunctive
List<RuleElement> ruleElements = cre.getRuleElements();
List<AnnotationFS> nextPostions = new ArrayList<AnnotationFS>();
for (RuleElement ruleElement : ruleElements) {
if(ruleElement instanceof ComposedRuleElement) {
AnnotationFS nextPositionForComposed = getNextPositionForComposed((ComposedRuleElement) ruleElement, after, annotation, stream);
if(nextPositionForComposed != null) {
nextPostions.add(nextPositionForComposed);
}
} else if(ruleElement instanceof RutaRuleElement) {
AnnotationFS nextPositionForAtomic = getNextPositionForAtomic(after, annotation, stream, ruleElement, result);
if(nextPositionForAtomic != null) {
nextPostions.add(nextPositionForAtomic);
}
}
}