Exemplo n.º 1
0
  /**
   * A filter for the sequence </br> Combines the sequential type and method declarations into a
   * block </br>
   *
   * @return return the sequence after combination.
   */
  private Sequence combine() {
    boolean recBlock = false;
    Sequence normalSeq = new Sequence();
    Sequence recSequence = new DeclSequence();
    for (TypedAST ast : this.getIterator()) {

      if (ast instanceof TypeVarDecl
          || ast instanceof DefDeclaration
          || ast instanceof TypeAbbrevDeclaration) {
        Declaration d = (Declaration) ast;
        if (recBlock == false) {
          recBlock = true;
          recSequence = new DeclSequence();
        }
        recSequence = Sequence.append(recSequence, d);
      } else {
        if (recBlock == true) {
          normalSeq = Sequence.append(normalSeq, recSequence);
        }
        normalSeq = Sequence.append(normalSeq, ast);
        recBlock = false;
      }
    }

    if (recBlock == true) {
      normalSeq = Sequence.append(normalSeq, recSequence);
    }
    return normalSeq;
  }