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

Reply via email to