[clangd] [Modules] Fix to correctly handle module dependencies (#142828) · llvm/llvm-project@02aec86 (original) (raw)
`@@ -360,9 +360,9 @@ void ModuleFileCache::remove(StringRef ModuleName) {
`
360
360
`/// Collect the directly and indirectly required module names for \param
`
361
361
`/// ModuleName in topological order. The \param ModuleName is guaranteed to
`
362
362
`/// be the last element in \param ModuleNames.
`
363
``
`-
llvm::SmallVector getAllRequiredModules(ProjectModules &MDB,
`
``
363
`+
llvm::SmallVectorstd::string getAllRequiredModules(ProjectModules &MDB,
`
364
364
` StringRef ModuleName) {
`
365
``
`-
llvm::SmallVectorllvm::StringRef ModuleNames;
`
``
365
`+
llvm::SmallVectorstd::string ModuleNames;
`
366
366
` llvm::StringSet<> ModuleNamesSet;
`
367
367
``
368
368
`auto VisitDeps = [&](StringRef ModuleName, auto Visitor) -> void {
`
`@@ -373,7 +373,7 @@ llvm::SmallVector getAllRequiredModules(ProjectModules &MDB,
`
373
373
`if (ModuleNamesSet.insert(RequiredModuleName).second)
`
374
374
`Visitor(RequiredModuleName, Visitor);
`
375
375
``
376
``
`-
ModuleNames.push_back(ModuleName);
`
``
376
`+
ModuleNames.push_back(ModuleName.str());
`
377
377
` };
`
378
378
`VisitDeps(ModuleName, VisitDeps);
`
379
379
``
`@@ -418,28 +418,30 @@ llvm::Error ModulesBuilder::ModulesBuilderImpl::getOrBuildModuleFile(
`
418
418
`// Get Required modules in topological order.
`
419
419
`auto ReqModuleNames = getAllRequiredModules(MDB, ModuleName);
`
420
420
`for (llvm::StringRef ReqModuleName : ReqModuleNames) {
`
421
``
`-
if (BuiltModuleFiles.isModuleUnitBuilt(ModuleName))
`
``
421
`+
if (BuiltModuleFiles.isModuleUnitBuilt(ReqModuleName))
`
422
422
`continue;
`
423
423
``
424
424
`if (auto Cached = Cache.getModule(ReqModuleName)) {
`
425
425
`if (IsModuleFileUpToDate(Cached->getModuleFilePath(), BuiltModuleFiles,
`
426
426
` TFS.view(std::nullopt))) {
`
427
``
`-
log("Reusing module {0} from {1}", ModuleName,
`
``
427
`+
log("Reusing module {0} from {1}", ReqModuleName,
`
428
428
` Cached->getModuleFilePath());
`
429
429
` BuiltModuleFiles.addModuleFile(std::move(Cached));
`
430
430
`continue;
`
431
431
` }
`
432
432
` Cache.remove(ReqModuleName);
`
433
433
` }
`
434
434
``
``
435
`+
std::string ReqFileName =
`
``
436
`+
MDB.getSourceForModuleName(ReqModuleName);
`
435
437
` llvm::Expected MF = buildModuleFile(
`
436
``
`-
ModuleName, ModuleUnitFileName, getCDB(), TFS, BuiltModuleFiles);
`
``
438
`+
ReqModuleName, ReqFileName, getCDB(), TFS, BuiltModuleFiles);
`
437
439
`if (llvm::Error Err = MF.takeError())
`
438
440
`return Err;
`
439
441
``
440
``
`-
log("Built module {0} to {1}", ModuleName, MF->getModuleFilePath());
`
``
442
`+
log("Built module {0} to {1}", ReqModuleName, MF->getModuleFilePath());
`
441
443
`auto BuiltModuleFile = std::make_shared(std::move(*MF));
`
442
``
`-
Cache.add(ModuleName, BuiltModuleFile);
`
``
444
`+
Cache.add(ReqModuleName, BuiltModuleFile);
`
443
445
` BuiltModuleFiles.addModuleFile(std::move(BuiltModuleFile));
`
444
446
` }
`
445
447
``