From: Benjamin Kramer Date: Wed, 24 Sep 2014 11:47:42 +0000 (+0000) Subject: Clean up ClangTool's argument adjuster handling a bit with unique_ptr. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=25d34b64267995bdf5fd0691c34237a65a885e69;p=clang Clean up ClangTool's argument adjuster handling a bit with unique_ptr. Make the dtor non-virtual while there. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218379 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Tooling/Tooling.h b/include/clang/Tooling/Tooling.h index 6f0d579688..89a4798b8c 100644 --- a/include/clang/Tooling/Tooling.h +++ b/include/clang/Tooling/Tooling.h @@ -203,7 +203,9 @@ class ToolInvocation { ~ToolInvocation(); /// \brief Set a \c DiagnosticConsumer to use during parsing. - void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer); + void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) { + this->DiagConsumer = DiagConsumer; + } /// \brief Map a virtual file to be used while running the tool. /// @@ -250,10 +252,12 @@ class ClangTool { ClangTool(const CompilationDatabase &Compilations, ArrayRef SourcePaths); - virtual ~ClangTool() { clearArgumentsAdjusters(); } + ~ClangTool(); /// \brief Set a \c DiagnosticConsumer to use during parsing. - void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer); + void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) { + this->DiagConsumer = DiagConsumer; + } /// \brief Map a virtual file to be used while running the tool. /// @@ -261,14 +265,6 @@ class ClangTool { /// \param Content A null terminated buffer of the file's content. void mapVirtualFile(StringRef FilePath, StringRef Content); - /// \brief Install command line arguments adjuster. - /// - /// \param Adjuster Command line arguments adjuster. - // - /// FIXME: Function is deprecated. Use (clear/append)ArgumentsAdjuster instead. - /// Remove it once all callers are gone. - void setArgumentsAdjuster(ArgumentsAdjuster *Adjuster); - /// \brief Append a command line arguments adjuster to the adjuster chain. /// /// \param Adjuster An argument adjuster, which will be run on the output of @@ -300,7 +296,7 @@ class ClangTool { // Contains a list of pairs (, ). std::vector< std::pair > MappedFileContents; - SmallVector ArgsAdjusters; + SmallVector, 2> ArgsAdjusters; DiagnosticConsumer *DiagConsumer; }; diff --git a/lib/Tooling/Tooling.cpp b/lib/Tooling/Tooling.cpp index 230f73c06b..aa72f630ff 100644 --- a/lib/Tooling/Tooling.cpp +++ b/lib/Tooling/Tooling.cpp @@ -186,10 +186,6 @@ ToolInvocation::~ToolInvocation() { delete Action; } -void ToolInvocation::setDiagnosticConsumer(DiagnosticConsumer *D) { - DiagConsumer = D; -} - void ToolInvocation::mapVirtualFile(StringRef FilePath, StringRef Content) { SmallString<1024> PathStorage; llvm::sys::path::native(FilePath, PathStorage); @@ -275,30 +271,21 @@ ClangTool::ClangTool(const CompilationDatabase &Compilations, ArrayRef SourcePaths) : Compilations(Compilations), SourcePaths(SourcePaths), Files(new FileManager(FileSystemOptions())), DiagConsumer(nullptr) { - ArgsAdjusters.push_back(new ClangStripOutputAdjuster()); - ArgsAdjusters.push_back(new ClangSyntaxOnlyAdjuster()); + appendArgumentsAdjuster(new ClangStripOutputAdjuster()); + appendArgumentsAdjuster(new ClangSyntaxOnlyAdjuster()); } -void ClangTool::setDiagnosticConsumer(DiagnosticConsumer *D) { - DiagConsumer = D; -} +ClangTool::~ClangTool() {} void ClangTool::mapVirtualFile(StringRef FilePath, StringRef Content) { MappedFileContents.push_back(std::make_pair(FilePath, Content)); } -void ClangTool::setArgumentsAdjuster(ArgumentsAdjuster *Adjuster) { - clearArgumentsAdjusters(); - appendArgumentsAdjuster(Adjuster); -} - void ClangTool::appendArgumentsAdjuster(ArgumentsAdjuster *Adjuster) { - ArgsAdjusters.push_back(Adjuster); + ArgsAdjusters.push_back(std::unique_ptr(Adjuster)); } void ClangTool::clearArgumentsAdjusters() { - for (unsigned I = 0, E = ArgsAdjusters.size(); I != E; ++I) - delete ArgsAdjusters[I]; ArgsAdjusters.clear(); } @@ -341,7 +328,7 @@ int ClangTool::run(ToolAction *Action) { llvm::report_fatal_error("Cannot chdir into \"" + Twine(CompileCommand.Directory) + "\n!"); std::vector CommandLine = CompileCommand.CommandLine; - for (ArgumentsAdjuster *Adjuster : ArgsAdjusters) + for (const auto &Adjuster : ArgsAdjusters) CommandLine = Adjuster->Adjust(CommandLine); assert(!CommandLine.empty()); CommandLine[0] = MainExecutable;