/*
   * @see org.eclipse.cdt.core.dom.ast.ASTVisitor#visit(org.eclipse.cdt.core.dom.ast.IASTTranslationUnit)
   */
  @Override
  public int visit(IASTTranslationUnit tu) {
    fTranslationUnitFileName = tu.getFilePath();

    push(ICElement.C_UNIT, TRANSLATION_UNIT_NAME, 0);

    // TODO fix ordering of includes and macros
    // includes
    final IASTPreprocessorIncludeStatement[] includeDirectives = tu.getIncludeDirectives();
    for (int i = 0; i < includeDirectives.length; i++) {
      IASTPreprocessorIncludeStatement includeDirective = includeDirectives[i];
      if (isLocalToFile(includeDirective)) {
        push(
            ICElement.C_INCLUDE,
            new String(includeDirective.getName().toCharArray()),
            getStartOffset(includeDirective));
        pop(getEndOffset(includeDirective));
      }
    }
    // macros
    final IASTPreprocessorMacroDefinition[] macroDefinitions = tu.getMacroDefinitions();
    for (int i = 0; i < macroDefinitions.length; i++) {
      IASTPreprocessorMacroDefinition macroDefinition = macroDefinitions[i];
      if (isLocalToFile(macroDefinition)) {
        push(
            ICElement.C_MACRO,
            new String(macroDefinition.getName().toCharArray()),
            getStartOffset(macroDefinition));
        pop(getEndOffset(macroDefinition));
      }
    }

    return super.visit(tu);
  }