2020
2121namespace swift {
2222class ModuleFile ;
23+ class PathObfuscator ;
24+ enum class ModuleLoadingBehavior ;
2325namespace file_types {
2426 enum ID : uint8_t ;
2527}
@@ -84,7 +86,8 @@ class SerializedModuleLoaderBase : public ModuleLoader {
8486 std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
8587 std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
8688 std::unique_ptr<llvm::MemoryBuffer> *moduleSourceInfoBuffer,
87- bool skipBuildingInterface, bool &isFramework, bool &isSystemModule);
89+ bool skipBuildingInterface, bool isTestableDependencyLookup,
90+ bool &isFramework, bool &isSystemModule);
8891
8992 // / Attempts to search the provided directory for a loadable serialized
9093 // / .swiftmodule with the provided `ModuleFilename`. Subclasses must
@@ -105,7 +108,8 @@ class SerializedModuleLoaderBase : public ModuleLoader {
105108 std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
106109 std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
107110 std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
108- bool skipBuildingInterface, bool IsFramework) = 0;
111+ bool SkipBuildingInterface, bool IsFramework,
112+ bool isTestableDependencyLookup = false ) = 0;
109113
110114 std::error_code
111115 openModuleFile (
@@ -146,6 +150,16 @@ class SerializedModuleLoaderBase : public ModuleLoader {
146150 // / Scan the given serialized module file to determine dependencies.
147151 llvm::ErrorOr<ModuleDependencyInfo> scanModuleFile (Twine modulePath, bool isFramework);
148152
153+ static llvm::ErrorOr<llvm::StringSet<>>
154+ getModuleImportsOfModule (Twine modulePath,
155+ ModuleLoadingBehavior transitiveBehavior,
156+ bool isFramework,
157+ bool isRequiredOSSAModules,
158+ StringRef SDKName,
159+ StringRef packageName,
160+ llvm::vfs::FileSystem *fileSystem,
161+ PathObfuscator &recoverer);
162+
149163 // / Load the module file into a buffer and also collect its module name.
150164 static std::unique_ptr<llvm::MemoryBuffer>
151165 getModuleName (ASTContext &Ctx, StringRef modulePath, std::string &Name);
@@ -179,7 +193,8 @@ class SerializedModuleLoaderBase : public ModuleLoader {
179193 // / If a non-null \p versionInfo is provided, the module version will be
180194 // / parsed and populated.
181195 virtual bool canImportModule (ImportPath::Module named,
182- ModuleVersionInfo *versionInfo) override ;
196+ ModuleVersionInfo *versionInfo,
197+ bool isTestableDependencyLookup = false ) override ;
183198
184199 // / Import a module with the given module path.
185200 // /
@@ -214,7 +229,8 @@ class SerializedModuleLoaderBase : public ModuleLoader {
214229
215230 virtual Optional<const ModuleDependencyInfo*> getModuleDependencies (
216231 StringRef moduleName, ModuleDependenciesCache &cache,
217- InterfaceSubContextDelegate &delegate) override ;
232+ InterfaceSubContextDelegate &delegate,
233+ bool isTestableImport) override ;
218234};
219235
220236// / Imports serialized Swift modules into an ASTContext.
@@ -232,7 +248,8 @@ class ImplicitSerializedModuleLoader : public SerializedModuleLoaderBase {
232248 std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
233249 std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
234250 std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
235- bool skipBuildingInterface, bool IsFramework) override ;
251+ bool SkipBuildingInterface, bool IsFramework,
252+ bool isTestableDependencyLookup = false ) override ;
236253
237254 bool maybeDiagnoseTargetMismatch (
238255 SourceLoc sourceLocation,
@@ -286,7 +303,8 @@ class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
286303 std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
287304 std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
288305 std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
289- bool skipBuildingInterface, bool IsFramework) override ;
306+ bool SkipBuildingInterface, bool IsFramework,
307+ bool IsTestableDependencyLookup = false ) override ;
290308
291309 bool maybeDiagnoseTargetMismatch (
292310 SourceLoc sourceLocation,
@@ -298,7 +316,8 @@ class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
298316 virtual ~MemoryBufferSerializedModuleLoader ();
299317
300318 bool canImportModule (ImportPath::Module named,
301- ModuleVersionInfo *versionInfo) override ;
319+ ModuleVersionInfo *versionInfo,
320+ bool isTestableDependencyLookup = false ) override ;
302321
303322 ModuleDecl *
304323 loadModule (SourceLoc importLoc,
0 commit comments