Author: Jan Svoboda Date: 2026-05-15T15:29:51Z New Revision: e11afed8d827b4148be6aa98d7e40bcb85f8e3a6
URL: https://github.com/llvm/llvm-project/commit/e11afed8d827b4148be6aa98d7e40bcb85f8e3a6 DIFF: https://github.com/llvm/llvm-project/commit/e11afed8d827b4148be6aa98d7e40bcb85f8e3a6.diff LOG: [clang][deps] Allow using collector with different consumers (#197287) Added: Modified: clang/include/clang/DependencyScanning/DependencyScannerImpl.h clang/include/clang/DependencyScanning/ModuleDepCollector.h clang/lib/DependencyScanning/DependencyScannerImpl.cpp clang/lib/DependencyScanning/ModuleDepCollector.cpp clang/lib/Tooling/DependencyScanningTool.cpp Removed: ################################################################################ diff --git a/clang/include/clang/DependencyScanning/DependencyScannerImpl.h b/clang/include/clang/DependencyScanning/DependencyScannerImpl.h index 4b8b79d7c8b0a..893017e68233b 100644 --- a/clang/include/clang/DependencyScanning/DependencyScannerImpl.h +++ b/clang/include/clang/DependencyScanning/DependencyScannerImpl.h @@ -120,8 +120,8 @@ computePrebuiltModulesASTMap(CompilerInstance &ScanInstance, std::shared_ptr<ModuleDepCollector> initializeScanInstanceDependencyCollector( CompilerInstance &ScanInstance, std::unique_ptr<DependencyOutputOptions> DepOutputOpts, - DependencyConsumer &Consumer, DependencyScanningService &Service, - CompilerInvocation &Inv, DependencyActionController &Controller, + DependencyScanningService &Service, CompilerInvocation &Inv, + DependencyActionController &Controller, PrebuiltModulesAttrsMap PrebuiltModulesASTMap, SmallVector<StringRef> &StableDirs); } // namespace dependencies diff --git a/clang/include/clang/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/DependencyScanning/ModuleDepCollector.h index dd1c57abfecff..c3a13ba48ca84 100644 --- a/clang/include/clang/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/DependencyScanning/ModuleDepCollector.h @@ -113,15 +113,15 @@ class ModuleDepCollector final : public DependencyCollector { public: ModuleDepCollector(DependencyScanningService &Service, std::unique_ptr<DependencyOutputOptions> Opts, - CompilerInstance &ScanInstance, DependencyConsumer &C, + CompilerInstance &ScanInstance, DependencyActionController &Controller, CompilerInvocation OriginalCI, const PrebuiltModulesAttrsMap PrebuiltModulesASTMap, const ArrayRef<StringRef> StableDirs); /// Processes the accumulated dependency information and reports it to the - /// \c DependencyConsumer. - void run(); + /// \c Consumer. + void run(DependencyConsumer &Consumer); void attachToPreprocessor(Preprocessor &PP) override; void attachToASTReader(ASTReader &R) override; @@ -139,8 +139,6 @@ class ModuleDepCollector final : public DependencyCollector { DependencyScanningService &Service; /// The compiler instance for scanning the current translation unit. CompilerInstance &ScanInstance; - /// The consumer of collected dependency information. - DependencyConsumer &Consumer; /// Callbacks for computing dependency information. DependencyActionController &Controller; /// Mapping from prebuilt AST filepaths to their attributes referenced during diff --git a/clang/lib/DependencyScanning/DependencyScannerImpl.cpp b/clang/lib/DependencyScanning/DependencyScannerImpl.cpp index 09694f094662f..42f87adba84c9 100644 --- a/clang/lib/DependencyScanning/DependencyScannerImpl.cpp +++ b/clang/lib/DependencyScanning/DependencyScannerImpl.cpp @@ -509,13 +509,13 @@ std::shared_ptr<ModuleDepCollector> dependencies::initializeScanInstanceDependencyCollector( CompilerInstance &ScanInstance, std::unique_ptr<DependencyOutputOptions> DepOutputOpts, - DependencyConsumer &Consumer, DependencyScanningService &Service, - CompilerInvocation &Inv, DependencyActionController &Controller, + DependencyScanningService &Service, CompilerInvocation &Inv, + DependencyActionController &Controller, PrebuiltModulesAttrsMap PrebuiltModulesASTMap, SmallVector<StringRef> &StableDirs) { auto MDC = std::make_shared<ModuleDepCollector>( - Service, std::move(DepOutputOpts), ScanInstance, Consumer, Controller, - Inv, std::move(PrebuiltModulesASTMap), StableDirs); + Service, std::move(DepOutputOpts), ScanInstance, Controller, Inv, + std::move(PrebuiltModulesASTMap), StableDirs); ScanInstance.addDependencyCollector(MDC); return MDC; } @@ -769,8 +769,8 @@ bool DependencyScanningAction::runInvocation( auto DepOutputOpts = createDependencyOutputOptions(*OriginalInvocation); MDC = initializeScanInstanceDependencyCollector( - ScanInstance, std::move(DepOutputOpts), Consumer, Service, - *OriginalInvocation, Controller, *MaybePrebuiltModulesASTMap, StableDirs); + ScanInstance, std::move(DepOutputOpts), Service, *OriginalInvocation, + Controller, *MaybePrebuiltModulesASTMap, StableDirs); if (ScanInstance.getDiagnostics().hasErrorOccurred()) return false; @@ -783,7 +783,7 @@ bool DependencyScanningAction::runInvocation( if (Result) { if (MDC) { - MDC->run(); + MDC->run(Consumer); MDC->applyDiscoveredDependencies(*OriginalInvocation); } diff --git a/clang/lib/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/DependencyScanning/ModuleDepCollector.cpp index 6a2bf7f68803f..5be29ccf36dcc 100644 --- a/clang/lib/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/DependencyScanning/ModuleDepCollector.cpp @@ -598,7 +598,7 @@ void ModuleDepCollector::handleImport(const Module *Imported) { } } -void ModuleDepCollector::run() { +void ModuleDepCollector::run(DependencyConsumer &Consumer) { auto &MDC = *this; FileID MainFileID = MDC.ScanInstance.getSourceManager().getMainFileID(); @@ -649,32 +649,32 @@ void ModuleDepCollector::run() { for (serialization::ModuleFile *MF : MDC.DirectModularDeps) handleTopLevelModule(MF); - MDC.Consumer.handleContextHash( + Consumer.handleContextHash( MDC.ScanInstance.getInvocation().computeContextHash()); - MDC.Consumer.handleDependencyOutputOpts(*MDC.Opts); + Consumer.handleDependencyOutputOpts(*MDC.Opts); - MDC.Consumer.handleProvidedAndRequiredStdCXXModules( - MDC.ProvidedStdCXXModule, MDC.RequiredStdCXXModules); + Consumer.handleProvidedAndRequiredStdCXXModules(MDC.ProvidedStdCXXModule, + MDC.RequiredStdCXXModules); for (auto &&I : MDC.ModularDeps) - MDC.Consumer.handleModuleDependency(*I.second); + Consumer.handleModuleDependency(*I.second); for (serialization::ModuleFile *MF : MDC.DirectModularDeps) { auto It = MDC.ModularDeps.find(MF); // Only report direct dependencies that were successfully handled. if (It != MDC.ModularDeps.end()) - MDC.Consumer.handleDirectModuleDependency(It->second->ID); + Consumer.handleDirectModuleDependency(It->second->ID); } for (auto &&I : MDC.VisibleModules) - MDC.Consumer.handleVisibleModule(std::string(I.getKey())); + Consumer.handleVisibleModule(std::string(I.getKey())); for (auto &&I : MDC.FileDeps) - MDC.Consumer.handleFileDependency(I); + Consumer.handleFileDependency(I); for (auto &&I : MDC.DirectPrebuiltModularDeps) - MDC.Consumer.handlePrebuiltModuleDependency(I.second); + Consumer.handlePrebuiltModuleDependency(I.second); } static StringRef makeAbsoluteAndCanonicalize(CompilerInstance &CI, @@ -847,12 +847,11 @@ void ModuleDepCollector::addAllModuleDeps(serialization::ModuleFile &MF, ModuleDepCollector::ModuleDepCollector( DependencyScanningService &Service, std::unique_ptr<DependencyOutputOptions> Opts, - CompilerInstance &ScanInstance, DependencyConsumer &C, - DependencyActionController &Controller, CompilerInvocation OriginalCI, + CompilerInstance &ScanInstance, DependencyActionController &Controller, + CompilerInvocation OriginalCI, const PrebuiltModulesAttrsMap PrebuiltModulesASTMap, const ArrayRef<StringRef> StableDirs) - : Service(Service), ScanInstance(ScanInstance), Consumer(C), - Controller(Controller), + : Service(Service), ScanInstance(ScanInstance), Controller(Controller), PrebuiltModulesASTMap(std::move(PrebuiltModulesASTMap)), StableDirs(StableDirs), Opts(std::move(Opts)), CommonInvocation( diff --git a/clang/lib/Tooling/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanningTool.cpp index fb0d39c2288e6..831cb0ea9bc1d 100644 --- a/clang/lib/Tooling/DependencyScanningTool.cpp +++ b/clang/lib/Tooling/DependencyScanningTool.cpp @@ -544,7 +544,7 @@ bool CompilerInstanceWithContext::computeDependencies( }); auto MDC = initializeScanInstanceDependencyCollector( - CI, std::make_unique<DependencyOutputOptions>(*OutputOpts), Consumer, + CI, std::make_unique<DependencyOutputOptions>(*OutputOpts), Worker.Service, /* The MDC's constructor makes a copy of the OriginalInvocation, so we can pass it in without worrying that it might be changed across @@ -610,7 +610,7 @@ bool CompilerInstanceWithContext::computeDependencies( if (CI.getDiagnostics().hasErrorOccurred()) return false; - MDC->run(); + MDC->run(Consumer); MDC->applyDiscoveredDependencies(ModuleInvocation); if (!Controller.finalize(CI, ModuleInvocation)) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
