Merge pull request #35356 from artemcm/DependencyScannerUseCacheWhenAppropriate

[Dependency Scanning] Optionally, resolve direct dependencies of a module using only the `ModuleDependenciesCache`.
This commit is contained in:
Artem Chikin
2021-01-13 12:01:12 -08:00
committed by GitHub
3 changed files with 36 additions and 16 deletions

View File

@@ -1528,15 +1528,35 @@ void ASTContext::addModuleInterfaceChecker(
Optional<ModuleDependencies> ASTContext::getModuleDependencies(
StringRef moduleName, bool isUnderlyingClangModule,
ModuleDependenciesCache &cache, InterfaceSubContextDelegate &delegate) {
for (auto &loader : getImpl().ModuleLoaders) {
if (isUnderlyingClangModule &&
loader.get() != getImpl().TheClangModuleLoader)
continue;
ModuleDependenciesCache &cache, InterfaceSubContextDelegate &delegate,
bool cacheOnly) {
// Retrieve the dependencies for this module.
if (cacheOnly) {
// Check whether we've cached this result.
if (!isUnderlyingClangModule) {
if (auto found = cache.findDependencies(moduleName,
ModuleDependenciesKind::SwiftTextual))
return found;
if (auto found = cache.findDependencies(moduleName,
ModuleDependenciesKind::SwiftTextual))
return found;
if (auto found = cache.findDependencies(moduleName,
ModuleDependenciesKind::SwiftPlaceholder))
return found;
}
if (auto found = cache.findDependencies(moduleName,
ModuleDependenciesKind::Clang))
return found;
} else {
for (auto &loader : getImpl().ModuleLoaders) {
if (isUnderlyingClangModule &&
loader.get() != getImpl().TheClangModuleLoader)
continue;
if (auto dependencies = loader->getModuleDependencies(moduleName, cache,
delegate))
return dependencies;
if (auto dependencies = loader->getModuleDependencies(moduleName, cache,
delegate))
return dependencies;
}
}
return None;