//===-- ClangDoc.cpp - ClangDoc ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file implements the main entry point for the clang-doc tool. It runs
// the clang-doc mapper on a given set of source code files using a
// FrontendActionFactory.
//
//===----------------------------------------------------------------------===//

#include "ClangDoc.h"
#include "Mapper.h"
#include "Representation.h"
#include "clang/AST/AST.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/Frontend/ASTConsumers.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Frontend/FrontendActions.h"

namespace clang {
namespace doc {

class MapperActionFactory : public tooling::FrontendActionFactory {
public:
  MapperActionFactory(ClangDocContext CDCtx) : CDCtx(CDCtx) {}
  clang::FrontendAction *create() override;

private:
  ClangDocContext CDCtx;
};

clang::FrontendAction *MapperActionFactory::create() {
  class ClangDocAction : public clang::ASTFrontendAction {
  public:
    ClangDocAction(ClangDocContext CDCtx) : CDCtx(CDCtx) {}

    std::unique_ptr<clang::ASTConsumer>
    CreateASTConsumer(clang::CompilerInstance &Compiler,
                      llvm::StringRef InFile) override {
      return std::make_unique<MapASTVisitor>(&Compiler.getASTContext(), CDCtx);
    }

  private:
    ClangDocContext CDCtx;
  };
  return new ClangDocAction(CDCtx);
}

std::unique_ptr<tooling::FrontendActionFactory>
newMapperActionFactory(ClangDocContext CDCtx) {
  return std::make_unique<MapperActionFactory>(CDCtx);
}

} // namespace doc
} // namespace clang
