diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h @@ -34,8 +34,10 @@ public: virtual ~DependencyConsumer() {} - virtual void handleFileDependency(const DependencyOutputOptions &Opts, - StringRef Filename) = 0; + virtual void + handleDependencyOutputOpts(const DependencyOutputOptions &Opts) = 0; + + virtual void handleFileDependency(StringRef Filename) = 0; virtual void handlePrebuiltModuleDependency(PrebuiltModuleDep PMD) = 0; diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -54,10 +54,12 @@ /// Prints out all of the gathered dependencies into a string. class MakeDependencyPrinterConsumer : public DependencyConsumer { public: - void handleFileDependency(const DependencyOutputOptions &Opts, - StringRef File) override { - if (!this->Opts) - this->Opts = std::make_unique(Opts); + void + handleDependencyOutputOpts(const DependencyOutputOptions &Opts) override { + this->Opts = std::make_unique(Opts); + } + + void handleFileDependency(StringRef File) override { Dependencies.push_back(std::string(File)); } @@ -74,8 +76,7 @@ void handleContextHash(std::string Hash) override {} void printDependencies(std::string &S) { - if (!Opts) - return; + assert(Opts && "Handled dependency output options."); class DependencyPrinter : public DependencyFileGenerator { public: @@ -128,8 +129,10 @@ FullDependencyPrinterConsumer(const llvm::StringSet<> &AlreadySeen) : AlreadySeen(AlreadySeen) {} - void handleFileDependency(const DependencyOutputOptions &Opts, - StringRef File) override { + void + handleDependencyOutputOpts(const DependencyOutputOptions &Opts) override {} + + void handleFileDependency(StringRef File) override { Dependencies.push_back(std::string(File)); } diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -32,11 +32,12 @@ : DependencyFileGenerator(*Opts), Opts(std::move(Opts)), C(C) {} void finishedMainFile(DiagnosticsEngine &Diags) override { + C.handleDependencyOutputOpts(*Opts); llvm::SmallString<256> CanonPath; for (const auto &File : getDependencies()) { CanonPath = File; llvm::sys::path::remove_dots(CanonPath, /*remove_dot_dot=*/true); - C.handleFileDependency(*Opts, CanonPath); + C.handleFileDependency(CanonPath); } } diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -173,11 +173,13 @@ for (const Module *M : DirectModularDeps) handleTopLevelModule(M); + MDC.Consumer.handleDependencyOutputOpts(*MDC.Opts); + for (auto &&I : MDC.ModularDeps) MDC.Consumer.handleModuleDependency(I.second); for (auto &&I : MDC.FileDeps) - MDC.Consumer.handleFileDependency(*MDC.Opts, I); + MDC.Consumer.handleFileDependency(I); for (auto &&I : DirectPrebuiltModularDeps) MDC.Consumer.handlePrebuiltModuleDependency(PrebuiltModuleDep{I});