mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Dependency Scanning] Pull optional dependencies from the adjacent binary module for direct interface dependencies
For a `@Testable` import in program source, if a Swift interface dependency is discovered, and has an adjacent binary `.swiftmodule`, open up the module, and pull in its optional dependencies. If an optional dependency cannot be resolved on the filesystem, fail silently without raising a diagnostic.
This commit is contained in:
@@ -86,7 +86,8 @@ protected:
|
||||
std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *moduleSourceInfoBuffer,
|
||||
bool skipBuildingInterface, bool &isFramework, bool &isSystemModule);
|
||||
bool skipBuildingInterface, bool isTestableDependencyLookup,
|
||||
bool &isFramework, bool &isSystemModule);
|
||||
|
||||
/// Attempts to search the provided directory for a loadable serialized
|
||||
/// .swiftmodule with the provided `ModuleFilename`. Subclasses must
|
||||
@@ -107,7 +108,8 @@ protected:
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
|
||||
bool skipBuildingInterface, bool IsFramework) = 0;
|
||||
bool SkipBuildingInterface, bool IsFramework,
|
||||
bool isTestableDependencyLookup = false) = 0;
|
||||
|
||||
std::error_code
|
||||
openModuleFile(
|
||||
@@ -191,7 +193,8 @@ public:
|
||||
/// If a non-null \p versionInfo is provided, the module version will be
|
||||
/// parsed and populated.
|
||||
virtual bool canImportModule(ImportPath::Module named,
|
||||
ModuleVersionInfo *versionInfo) override;
|
||||
ModuleVersionInfo *versionInfo,
|
||||
bool isTestableDependencyLookup = false) override;
|
||||
|
||||
/// Import a module with the given module path.
|
||||
///
|
||||
@@ -226,7 +229,8 @@ public:
|
||||
|
||||
virtual Optional<const ModuleDependencyInfo*> getModuleDependencies(
|
||||
StringRef moduleName, ModuleDependenciesCache &cache,
|
||||
InterfaceSubContextDelegate &delegate) override;
|
||||
InterfaceSubContextDelegate &delegate,
|
||||
bool isTestableImport) override;
|
||||
};
|
||||
|
||||
/// Imports serialized Swift modules into an ASTContext.
|
||||
@@ -244,7 +248,8 @@ class ImplicitSerializedModuleLoader : public SerializedModuleLoaderBase {
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
|
||||
bool skipBuildingInterface, bool IsFramework) override;
|
||||
bool SkipBuildingInterface, bool IsFramework,
|
||||
bool isTestableDependencyLookup = false) override;
|
||||
|
||||
bool maybeDiagnoseTargetMismatch(
|
||||
SourceLoc sourceLocation,
|
||||
@@ -298,7 +303,8 @@ class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
|
||||
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
|
||||
bool skipBuildingInterface, bool IsFramework) override;
|
||||
bool SkipBuildingInterface, bool IsFramework,
|
||||
bool IsTestableDependencyLookup = false) override;
|
||||
|
||||
bool maybeDiagnoseTargetMismatch(
|
||||
SourceLoc sourceLocation,
|
||||
@@ -310,7 +316,8 @@ public:
|
||||
virtual ~MemoryBufferSerializedModuleLoader();
|
||||
|
||||
bool canImportModule(ImportPath::Module named,
|
||||
ModuleVersionInfo *versionInfo) override;
|
||||
ModuleVersionInfo *versionInfo,
|
||||
bool isTestableDependencyLookup = false) override;
|
||||
|
||||
ModuleDecl *
|
||||
loadModule(SourceLoc importLoc,
|
||||
|
||||
Reference in New Issue
Block a user