diff options
Diffstat (limited to 'include/clang/Tooling/Tooling.h')
-rw-r--r-- | include/clang/Tooling/Tooling.h | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/include/clang/Tooling/Tooling.h b/include/clang/Tooling/Tooling.h index de507a7a8b25..769acd325367 100644 --- a/include/clang/Tooling/Tooling.h +++ b/include/clang/Tooling/Tooling.h @@ -39,6 +39,7 @@ #include "clang/Tooling/CompilationDatabase.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/Twine.h" +#include <memory> #include <string> #include <vector> @@ -80,7 +81,7 @@ public: /// \brief Invokes the compiler with a FrontendAction created by create(). bool runInvocation(clang::CompilerInvocation *Invocation, FileManager *Files, - DiagnosticConsumer *DiagConsumer); + DiagnosticConsumer *DiagConsumer) override; /// \brief Returns a new clang::FrontendAction. /// @@ -96,7 +97,7 @@ public: /// FrontendActionFactory *Factory = /// newFrontendActionFactory<clang::SyntaxOnlyAction>(); template <typename T> -FrontendActionFactory *newFrontendActionFactory(); +std::unique_ptr<FrontendActionFactory> newFrontendActionFactory(); /// \brief Callbacks called before and after each source file processed by a /// FrontendAction created by the FrontedActionFactory returned by \c @@ -125,11 +126,11 @@ public: /// struct ProvidesASTConsumers { /// clang::ASTConsumer *newASTConsumer(); /// } Factory; -/// FrontendActionFactory *FactoryAdapter = -/// newFrontendActionFactory(&Factory); +/// std::unique_ptr<FrontendActionFactory> FactoryAdapter( +/// newFrontendActionFactory(&Factory)); template <typename FactoryT> -inline FrontendActionFactory *newFrontendActionFactory( - FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks = NULL); +inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory( + FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks = nullptr); /// \brief Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag. /// @@ -160,8 +161,8 @@ bool runToolOnCodeWithArgs(clang::FrontendAction *ToolAction, const Twine &Code, /// \param FileName The file name which 'Code' will be mapped as. /// /// \return The resulting AST or null if an error occurred. -ASTUnit *buildASTFromCode(const Twine &Code, - const Twine &FileName = "input.cc"); +std::unique_ptr<ASTUnit> buildASTFromCode(const Twine &Code, + const Twine &FileName = "input.cc"); /// \brief Builds an AST for 'Code' with additional flags. /// @@ -170,9 +171,10 @@ ASTUnit *buildASTFromCode(const Twine &Code, /// \param FileName The file name which 'Code' will be mapped as. /// /// \return The resulting AST or null if an error occurred. -ASTUnit *buildASTFromCodeWithArgs(const Twine &Code, - const std::vector<std::string> &Args, - const Twine &FileName = "input.cc"); +std::unique_ptr<ASTUnit> +buildASTFromCodeWithArgs(const Twine &Code, + const std::vector<std::string> &Args, + const Twine &FileName = "input.cc"); /// \brief Utility to run a FrontendAction in a single clang invocation. class ToolInvocation { @@ -186,7 +188,7 @@ class ToolInvocation { /// \param FAction The action to be executed. Class takes ownership. /// \param Files The FileManager used for the execution. Class does not take /// ownership. - ToolInvocation(ArrayRef<std::string> CommandLine, FrontendAction *FAction, + ToolInvocation(std::vector<std::string> CommandLine, FrontendAction *FAction, FileManager *Files); /// \brief Create a tool invocation. @@ -194,7 +196,7 @@ class ToolInvocation { /// \param CommandLine The command line arguments to clang. /// \param Action The action to be executed. /// \param Files The FileManager used for the execution. - ToolInvocation(ArrayRef<std::string> CommandLine, ToolAction *Action, + ToolInvocation(std::vector<std::string> CommandLine, ToolAction *Action, FileManager *Files); ~ToolInvocation(); @@ -282,7 +284,7 @@ class ClangTool { /// \brief Create an AST for each file specified in the command line and /// append them to ASTs. - int buildASTs(std::vector<ASTUnit *> &ASTs); + int buildASTs(std::vector<std::unique_ptr<ASTUnit>> &ASTs); /// \brief Returns the file manager used in the tool. /// @@ -303,17 +305,18 @@ class ClangTool { }; template <typename T> -FrontendActionFactory *newFrontendActionFactory() { +std::unique_ptr<FrontendActionFactory> newFrontendActionFactory() { class SimpleFrontendActionFactory : public FrontendActionFactory { public: - virtual clang::FrontendAction *create() { return new T; } + clang::FrontendAction *create() override { return new T; } }; - return new SimpleFrontendActionFactory; + return std::unique_ptr<FrontendActionFactory>( + new SimpleFrontendActionFactory); } template <typename FactoryT> -inline FrontendActionFactory *newFrontendActionFactory( +inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory( FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks) { class FrontendActionFactoryAdapter : public FrontendActionFactory { public: @@ -321,7 +324,7 @@ inline FrontendActionFactory *newFrontendActionFactory( SourceFileCallbacks *Callbacks) : ConsumerFactory(ConsumerFactory), Callbacks(Callbacks) {} - virtual clang::FrontendAction *create() { + clang::FrontendAction *create() override { return new ConsumerFactoryAdaptor(ConsumerFactory, Callbacks); } @@ -333,21 +336,21 @@ inline FrontendActionFactory *newFrontendActionFactory( : ConsumerFactory(ConsumerFactory), Callbacks(Callbacks) {} clang::ASTConsumer *CreateASTConsumer(clang::CompilerInstance &, - StringRef) { + StringRef) override { return ConsumerFactory->newASTConsumer(); } protected: - virtual bool BeginSourceFileAction(CompilerInstance &CI, - StringRef Filename) LLVM_OVERRIDE { + bool BeginSourceFileAction(CompilerInstance &CI, + StringRef Filename) override { if (!clang::ASTFrontendAction::BeginSourceFileAction(CI, Filename)) return false; - if (Callbacks != NULL) + if (Callbacks) return Callbacks->handleBeginSource(CI, Filename); return true; } - virtual void EndSourceFileAction() LLVM_OVERRIDE { - if (Callbacks != NULL) + void EndSourceFileAction() override { + if (Callbacks) Callbacks->handleEndSource(); clang::ASTFrontendAction::EndSourceFileAction(); } @@ -360,7 +363,8 @@ inline FrontendActionFactory *newFrontendActionFactory( SourceFileCallbacks *Callbacks; }; - return new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks); + return std::unique_ptr<FrontendActionFactory>( + new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks)); } /// \brief Returns the absolute path of \c File, by prepending it with |