@@ -59,6 +59,11 @@ public class SwiftSymbolTable {
5959 public let importedModules : [ String : SwiftModuleSymbolTable ]
6060 public let parsedModule : SwiftModuleSymbolTable
6161
62+ /// Module names within `importedModules` that are synthetic — they exist
63+ /// purely to drive type resolution and must NOT be emitted as
64+ /// `import <module>` statements in generated Swift code.
65+ public let syntheticImportedModuleNames : Set < String >
66+
6267 private var knownTypeToNominal : [ SwiftKnownTypeDeclKind : SwiftNominalTypeDeclaration ] = [ : ]
6368 private var prioritySortedImportedModules : [ SwiftModuleSymbolTable ] {
6469 // Ordering with source of symbols preference:
@@ -72,9 +77,14 @@ public class SwiftSymbolTable {
7277 } )
7378 }
7479
75- public init ( parsedModule: SwiftModuleSymbolTable , importedModules: [ String : SwiftModuleSymbolTable ] ) {
80+ public init (
81+ parsedModule: SwiftModuleSymbolTable ,
82+ importedModules: [ String : SwiftModuleSymbolTable ] ,
83+ syntheticImportedModuleNames: Set < String > = [ ]
84+ ) {
7685 self . parsedModule = parsedModule
7786 self . importedModules = importedModules
87+ self . syntheticImportedModuleNames = syntheticImportedModuleNames
7888 }
7989
8090 public func isModuleName( _ name: String ) -> Bool {
@@ -123,7 +133,10 @@ extension SwiftSymbolTable {
123133 guard importedModules [ dependencyModuleName] == nil else {
124134 continue
125135 }
126- let dependencyInputs = sourceDependencies. swiftModuleInputs [ dependencyModuleName] ?? [ ]
136+ let dependencyInputs =
137+ sourceDependencies. swiftModuleInputs [ dependencyModuleName]
138+ ?? sourceDependencies. syntheticStubInputs [ dependencyModuleName]
139+ ?? [ ]
127140 // TODO: build a `dependencyImportedModules` dict by scanning the dep's
128141 // own source files with `importingModules(sourceFile:)`, instead of
129142 // reusing the primary's `importedModules`. The current set is too broad
@@ -185,7 +198,11 @@ extension SwiftSymbolTable {
185198 builder. handle ( sourceFile: sourceFile. syntax, sourceFilePath: sourceFile. path)
186199 }
187200 let parsedModule = builder. finalize ( )
188- return SwiftSymbolTable ( parsedModule: parsedModule, importedModules: importedModules)
201+ return SwiftSymbolTable (
202+ parsedModule: parsedModule,
203+ importedModules: importedModules,
204+ syntheticImportedModuleNames: sourceDependencies. syntheticModuleNames,
205+ )
189206 }
190207}
191208
0 commit comments