@@ -179,20 +179,20 @@ ModuleDependencyScanningWorker::ModuleDependencyScanningWorker(
179
179
180
180
ModuleDependencyVector
181
181
ModuleDependencyScanningWorker::scanFilesystemForModuleDependency (
182
- StringRef moduleName, const ModuleDependenciesCache &cache,
182
+ ImportPath::Module namedImport, StringRef moduleName, const ModuleDependenciesCache &cache,
183
183
bool isTestableImport) {
184
184
// First query a Swift module, otherwise lookup a Clang module
185
185
ModuleDependencyVector moduleDependencies =
186
186
swiftScannerModuleLoader->getModuleDependencies (
187
- moduleName, cache.getModuleOutputPath (),
187
+ namedImport, moduleName, cache.getModuleOutputPath (),
188
188
cache.getScanService ().getCachingFS (),
189
189
cache.getAlreadySeenClangModules (), clangScanningTool,
190
190
*ScanningASTDelegate, cache.getScanService ().getPrefixMapper (),
191
191
isTestableImport);
192
192
193
193
if (moduleDependencies.empty ())
194
194
moduleDependencies = clangScannerModuleLoader->getModuleDependencies (
195
- moduleName, cache.getModuleOutputPath (),
195
+ namedImport, moduleName, cache.getModuleOutputPath (),
196
196
cache.getScanService ().getCachingFS (),
197
197
cache.getAlreadySeenClangModules (), clangScanningTool,
198
198
*ScanningASTDelegate, cache.getScanService ().getPrefixMapper (),
@@ -203,19 +203,19 @@ ModuleDependencyScanningWorker::scanFilesystemForModuleDependency(
203
203
204
204
ModuleDependencyVector
205
205
ModuleDependencyScanningWorker::scanFilesystemForSwiftModuleDependency (
206
- StringRef moduleName, const ModuleDependenciesCache &cache) {
206
+ ImportPath::Module namedImport, StringRef moduleName, const ModuleDependenciesCache &cache) {
207
207
return swiftScannerModuleLoader->getModuleDependencies (
208
- moduleName, cache.getModuleOutputPath (),
208
+ namedImport, moduleName, cache.getModuleOutputPath (),
209
209
cache.getScanService ().getCachingFS (), cache.getAlreadySeenClangModules (),
210
210
clangScanningTool, *ScanningASTDelegate,
211
211
cache.getScanService ().getPrefixMapper (), false );
212
212
}
213
213
214
214
ModuleDependencyVector
215
215
ModuleDependencyScanningWorker::scanFilesystemForClangModuleDependency (
216
- StringRef moduleName, const ModuleDependenciesCache &cache) {
216
+ ImportPath::Module namedImport, StringRef moduleName, const ModuleDependenciesCache &cache) {
217
217
return clangScannerModuleLoader->getModuleDependencies (
218
- moduleName, cache.getModuleOutputPath (),
218
+ namedImport, moduleName, cache.getModuleOutputPath (),
219
219
cache.getScanService ().getCachingFS (), cache.getAlreadySeenClangModules (),
220
220
clangScanningTool, *ScanningASTDelegate,
221
221
cache.getScanService ().getPrefixMapper (), false );
@@ -252,6 +252,11 @@ auto ModuleDependencyScanner::withDependencyScanningWorker(Function &&F,
252
252
return result;
253
253
}
254
254
255
+ ImportPath::Module ModuleDependencyScanner::getModuleImportIdentifier (StringRef moduleName) {
256
+ ImportPath::Module::Builder builder (ScanASTContext, moduleName, /* separator=*/ ' .' );
257
+ return builder.get ();
258
+ }
259
+
255
260
ModuleDependencyScanner::ModuleDependencyScanner (
256
261
SwiftDependencyScanningService &ScanningService,
257
262
const CompilerInvocation &ScanCompilerInvocation,
@@ -443,10 +448,11 @@ ModuleDependencyScanner::getNamedClangModuleDependencyInfo(
443
448
return found;
444
449
445
450
// Otherwise perform filesystem scan
451
+ auto namedImportIdentifier = getModuleImportIdentifier (moduleName);
446
452
auto moduleDependencies = withDependencyScanningWorker (
447
- [&cache, moduleName](ModuleDependencyScanningWorker *ScanningWorker) {
453
+ [&cache, namedImportIdentifier, moduleName](ModuleDependencyScanningWorker *ScanningWorker) {
448
454
return ScanningWorker->scanFilesystemForClangModuleDependency (
449
- moduleName, cache);
455
+ namedImportIdentifier, moduleName, cache);
450
456
});
451
457
if (moduleDependencies.empty ())
452
458
return llvm::None;
@@ -473,11 +479,14 @@ ModuleDependencyScanner::getNamedSwiftModuleDependencyInfo(
473
479
ModuleDependencyKind::SwiftPlaceholder))
474
480
return found;
475
481
482
+ ImportPath::Module::Builder builder (ScanASTContext, moduleName, /* separator=*/ ' .' );
483
+ auto modulePath = builder.get ();
476
484
// Otherwise perform filesystem scan
485
+ auto namedImportIdentifier = getModuleImportIdentifier (moduleName);
477
486
auto moduleDependencies = withDependencyScanningWorker (
478
- [&cache, moduleName](ModuleDependencyScanningWorker *ScanningWorker) {
487
+ [&cache, namedImportIdentifier, moduleName](ModuleDependencyScanningWorker *ScanningWorker) {
479
488
return ScanningWorker->scanFilesystemForSwiftModuleDependency (
480
- moduleName, cache);
489
+ namedImportIdentifier, moduleName, cache);
481
490
});
482
491
if (moduleDependencies.empty ())
483
492
return llvm::None;
@@ -552,6 +561,7 @@ void ModuleDependencyScanner::resolveImportDependencies(
552
561
// A scanning task to query a module by-name. If the module already exists
553
562
// in the cache, do nothing and return.
554
563
auto scanForModuleDependency = [this , &cache, &moduleLookupResult](
564
+ ImportPath::Module namedImportIdentifier,
555
565
StringRef moduleName, bool onlyClangModule,
556
566
bool isTestable) {
557
567
// If this is already in the cache, no work to do here
@@ -564,13 +574,13 @@ void ModuleDependencyScanner::resolveImportDependencies(
564
574
}
565
575
566
576
auto moduleDependencies = withDependencyScanningWorker (
567
- [&cache, moduleName, onlyClangModule,
577
+ [&cache, namedImportIdentifier, moduleName, onlyClangModule,
568
578
isTestable](ModuleDependencyScanningWorker *ScanningWorker) {
569
579
return onlyClangModule
570
580
? ScanningWorker->scanFilesystemForClangModuleDependency (
571
- moduleName, cache)
581
+ namedImportIdentifier, moduleName, cache)
572
582
: ScanningWorker->scanFilesystemForModuleDependency (
573
- moduleName, cache, isTestable);
583
+ namedImportIdentifier, moduleName, cache, isTestable);
574
584
});
575
585
moduleLookupResult.insert_or_assign (moduleName, moduleDependencies);
576
586
};
@@ -579,14 +589,16 @@ void ModuleDependencyScanner::resolveImportDependencies(
579
589
for (const auto &dependsOn : moduleDependencyInfo->getModuleImports ()) {
580
590
bool underlyingClangModuleLookup = moduleID.ModuleName == dependsOn;
581
591
bool isTestable = moduleDependencyInfo->isTestableImport (dependsOn);
582
- ScanningThreadPool.async (scanForModuleDependency, dependsOn,
592
+ ScanningThreadPool.async (scanForModuleDependency,
593
+ getModuleImportIdentifier (dependsOn), dependsOn,
583
594
underlyingClangModuleLookup, isTestable);
584
595
}
585
596
for (const auto &dependsOn :
586
597
moduleDependencyInfo->getOptionalModuleImports ()) {
587
598
bool underlyingClangModuleLookup = moduleID.ModuleName == dependsOn;
588
599
bool isTestable = moduleDependencyInfo->isTestableImport (dependsOn);
589
- ScanningThreadPool.async (scanForModuleDependency, dependsOn,
600
+ ScanningThreadPool.async (scanForModuleDependency,
601
+ getModuleImportIdentifier (dependsOn), dependsOn,
590
602
underlyingClangModuleLookup, isTestable);
591
603
}
592
604
ScanningThreadPool.wait ();
@@ -726,23 +738,28 @@ void ModuleDependencyScanner::resolveSwiftOverlayDependencies(
726
738
// A scanning task to query a Swift module by-name. If the module already
727
739
// exists in the cache, do nothing and return.
728
740
auto scanForSwiftDependency = [this , &cache, &swiftOverlayLookupResult](
741
+ ImportPath::Module namedImportIdentifier,
729
742
StringRef moduleName) {
730
743
if (cache.hasDependency (moduleName, ModuleDependencyKind::SwiftInterface) ||
731
744
cache.hasDependency (moduleName, ModuleDependencyKind::SwiftBinary) ||
732
745
cache.hasDependency (moduleName, ModuleDependencyKind::SwiftPlaceholder))
733
746
return ;
734
747
735
748
auto moduleDependencies = withDependencyScanningWorker (
736
- [&cache, moduleName](ModuleDependencyScanningWorker *ScanningWorker) {
737
- return ScanningWorker->scanFilesystemForSwiftModuleDependency (moduleName,
749
+ [&cache, namedImportIdentifier, moduleName](ModuleDependencyScanningWorker *ScanningWorker) {
750
+ return ScanningWorker->scanFilesystemForSwiftModuleDependency (namedImportIdentifier,
751
+ moduleName,
738
752
cache);
739
753
});
740
754
swiftOverlayLookupResult.insert_or_assign (moduleName, moduleDependencies);
741
755
};
742
756
743
757
// Enque asynchronous lookup tasks
744
758
for (const auto &clangDep : clangDependencies)
745
- ScanningThreadPool.async (scanForSwiftDependency, clangDep);
759
+ ScanningThreadPool.async (scanForSwiftDependency,
760
+ getModuleImportIdentifier (clangDep),
761
+ clangDep);
762
+
746
763
ScanningThreadPool.wait ();
747
764
748
765
// Aggregate both previously-cached and freshly-scanned module results
0 commit comments