@@ -304,12 +304,12 @@ resolveExplicitModuleInputs(ModuleDependencyID moduleID,
304
304
305
305
// / Resolve the direct dependencies of the given module.
306
306
static ArrayRef<ModuleDependencyID>
307
- resolveDirectDependencies (CompilerInstance &instance, ModuleDependencyID module ,
307
+ resolveDirectDependencies (CompilerInstance &instance, ModuleDependencyID moduleID ,
308
308
ModuleDependenciesCache &cache,
309
309
InterfaceSubContextDelegate &ASTDelegate) {
310
- PrettyStackTraceStringAction trace (" Resolving direct dependencies of: " , module .first );
310
+ PrettyStackTraceStringAction trace (" Resolving direct dependencies of: " , moduleID .first );
311
311
auto &ctx = instance.getASTContext ();
312
- auto optionalKnownDependencies = cache.findDependency (module .first , module .second );
312
+ auto optionalKnownDependencies = cache.findDependency (moduleID .first , moduleID .second );
313
313
assert (optionalKnownDependencies.has_value ());
314
314
auto knownDependencies = optionalKnownDependencies.value ();
315
315
@@ -326,18 +326,31 @@ resolveDirectDependencies(CompilerInstance &instance, ModuleDependencyID module,
326
326
ModuleDependencyIDSetVector result;
327
327
for (auto dependsOn : knownDependencies->getModuleImports ()) {
328
328
// Figure out what kind of module we need.
329
- bool onlyClangModule = !isSwift || module .first == dependsOn;
329
+ bool onlyClangModule = !isSwift || moduleID .first == dependsOn;
330
330
if (onlyClangModule) {
331
331
if (auto found =
332
332
ctx.getClangModuleDependencies (dependsOn, cache, ASTDelegate))
333
333
result.insert ({dependsOn, ModuleDependencyKind::Clang});
334
334
} else {
335
335
if (auto found =
336
- ctx.getModuleDependencies (dependsOn, cache, ASTDelegate, module ))
336
+ ctx.getModuleDependencies (dependsOn, cache, ASTDelegate,
337
+ /* optionalDependencyLookup */ false ,
338
+ moduleID))
337
339
result.insert ({dependsOn, found.value ()->getKind ()});
338
340
}
339
341
}
340
342
343
+ // We may have a set of optional dependencies for this module, such as `@_implementationOnly`
344
+ // imports of a `@Testable` import. Attempt to locate those, but do not fail if they
345
+ // cannot be found.
346
+ for (auto optionallyDependsOn : knownDependencies->getOptionalModuleImports ()) {
347
+ if (auto found =
348
+ ctx.getModuleDependencies (optionallyDependsOn, cache, ASTDelegate,
349
+ /* optionalDependencyLookup */ true ,
350
+ moduleID))
351
+ result.insert ({optionallyDependsOn, found.value ()->getKind ()});
352
+ }
353
+
341
354
if (isSwiftInterfaceOrSource) {
342
355
// A record of all of the Clang modules referenced from this Swift module.
343
356
std::vector<std::string> allClangModules;
@@ -347,11 +360,11 @@ resolveDirectDependencies(CompilerInstance &instance, ModuleDependencyID module,
347
360
if (knownDependencies->getBridgingHeader ()) {
348
361
auto clangImporter =
349
362
static_cast <ClangImporter *>(ctx.getClangModuleLoader ());
350
- if (!clangImporter->addBridgingHeaderDependencies (module .first ,
351
- module .second , cache)) {
363
+ if (!clangImporter->addBridgingHeaderDependencies (moduleID .first ,
364
+ moduleID .second , cache)) {
352
365
// Grab the updated module dependencies.
353
366
// FIXME: This is such a hack.
354
- knownDependencies = *cache.findDependency (module .first , module .second );
367
+ knownDependencies = *cache.findDependency (moduleID .first , moduleID .second );
355
368
356
369
// Add the Clang modules referenced from the bridging header to the
357
370
// set of Clang modules we know about.
@@ -386,15 +399,15 @@ resolveDirectDependencies(CompilerInstance &instance, ModuleDependencyID module,
386
399
for (const auto &clangDep : allClangModules) {
387
400
if (auto found =
388
401
ctx.getSwiftModuleDependencies (clangDep, cache, ASTDelegate)) {
389
- if (clangDep != module .first )
402
+ if (clangDep != moduleID .first )
390
403
result.insert ({clangDep, found.value ()->getKind ()});
391
404
}
392
405
}
393
406
}
394
407
395
408
// Resolve the dependnecy info
396
- cache.resolveDependencyImports (module , result.takeVector ());
397
- return cache.findDependency (module .first , module .second ).value ()->getModuleDependencies ();
409
+ cache.resolveDependencyImports (moduleID , result.takeVector ());
410
+ return cache.findDependency (moduleID .first , moduleID .second ).value ()->getModuleDependencies ();
398
411
}
399
412
400
413
static void discoverCrossImportOverlayDependencies (
0 commit comments