@@ -123,7 +123,8 @@ private extension SwiftScan {
123
123
guard let moduleDetailsRef = api. swiftscan_module_info_get_details ( moduleInfoRef) else {
124
124
throw DependencyScanningError . missingField ( " modules[ \( moduleId) ].details " )
125
125
}
126
- let details = try constructModuleDetails ( from: moduleDetailsRef)
126
+ let details = try constructModuleDetails ( from: moduleDetailsRef,
127
+ moduleAliases: moduleAliases)
127
128
128
129
return ( moduleId, ModuleInfo ( modulePath: modulePath, sourceFiles: sourceFiles,
129
130
directDependencies: directDependencies,
@@ -133,12 +134,14 @@ private extension SwiftScan {
133
134
/// From a reference to a binary-format module info details object info returned by libSwiftScan,
134
135
/// construct an instance of an `ModuleInfo`.Details as used by the driver.
135
136
/// The object returned by libSwiftScan is a union so ensure to execute dependency-specific queries.
136
- func constructModuleDetails( from moduleDetailsRef: swiftscan_module_details_t )
137
+ func constructModuleDetails( from moduleDetailsRef: swiftscan_module_details_t ,
138
+ moduleAliases: [ String : String ] ? )
137
139
throws -> ModuleInfo . Details {
138
140
let moduleKind = api. swiftscan_module_detail_get_kind ( moduleDetailsRef)
139
141
switch moduleKind {
140
142
case SWIFTSCAN_DEPENDENCY_INFO_SWIFT_TEXTUAL:
141
- return . swift( try constructSwiftTextualModuleDetails ( from: moduleDetailsRef) )
143
+ return . swift( try constructSwiftTextualModuleDetails ( from: moduleDetailsRef,
144
+ moduleAliases: moduleAliases) )
142
145
case SWIFTSCAN_DEPENDENCY_INFO_SWIFT_BINARY:
143
146
return . swiftPrebuiltExternal( try constructSwiftBinaryModuleDetails ( from: moduleDetailsRef) )
144
147
case SWIFTSCAN_DEPENDENCY_INFO_SWIFT_PLACEHOLDER:
@@ -151,7 +154,8 @@ private extension SwiftScan {
151
154
}
152
155
153
156
/// Construct a `SwiftModuleDetails` from a `swiftscan_module_details_t` reference
154
- func constructSwiftTextualModuleDetails( from moduleDetailsRef: swiftscan_module_details_t )
157
+ func constructSwiftTextualModuleDetails( from moduleDetailsRef: swiftscan_module_details_t ,
158
+ moduleAliases: [ String : String ] ? )
155
159
throws -> SwiftModuleDetails {
156
160
let moduleInterfacePath =
157
161
try getOptionalPathDetail ( from: moduleDetailsRef,
@@ -168,6 +172,15 @@ private extension SwiftScan {
168
172
let bridgingHeaderDependencies =
169
173
try getOptionalStringArrayDetail ( from: moduleDetailsRef,
170
174
using: api. swiftscan_swift_textual_detail_get_bridging_module_dependencies)
175
+ let bridgingHeader : BridgingHeader ?
176
+ if let resolvedBridgingHeaderPath = bridgingHeaderPath {
177
+ bridgingHeader = BridgingHeader ( path: resolvedBridgingHeaderPath,
178
+ sourceFiles: bridgingSourceFiles ?? [ ] ,
179
+ moduleDependencies: bridgingHeaderDependencies ?? [ ] )
180
+ } else {
181
+ bridgingHeader = nil
182
+ }
183
+
171
184
let commandLine =
172
185
try getOptionalStringArrayDetail ( from: moduleDetailsRef,
173
186
using: api. swiftscan_swift_textual_detail_get_command_line)
@@ -180,15 +193,25 @@ private extension SwiftScan {
180
193
using: api. swiftscan_swift_textual_detail_get_context_hash)
181
194
let isFramework = api. swiftscan_swift_textual_detail_get_is_framework ( moduleDetailsRef)
182
195
196
+ // Decode all dependencies of this module
197
+ let swiftOverlayDependencies : [ ModuleDependencyId ] ?
198
+ if supportsSeparateSwiftOverlayDependencies ( ) ,
199
+ let encodedOverlayDepsRef = api. swiftscan_swift_textual_detail_get_swift_overlay_dependencies ( moduleDetailsRef) {
200
+ let encodedOverlayDependencies = try toSwiftStringArray ( encodedOverlayDepsRef. pointee)
201
+ swiftOverlayDependencies =
202
+ try encodedOverlayDependencies. map { try decodeModuleNameAndKind ( from: $0, moduleAliases: moduleAliases) }
203
+ } else {
204
+ swiftOverlayDependencies = nil
205
+ }
206
+
183
207
return SwiftModuleDetails ( moduleInterfacePath: moduleInterfacePath,
184
208
compiledModuleCandidates: compiledModuleCandidates,
185
- bridgingHeaderPath: bridgingHeaderPath,
186
- bridgingSourceFiles: bridgingSourceFiles,
187
- bridgingHeaderDependencies: bridgingHeaderDependencies? . map { . clang( $0) } ,
209
+ bridgingHeader: bridgingHeader,
188
210
commandLine: commandLine,
189
211
contextHash: contextHash,
190
212
extraPcmArgs: extraPcmArgs,
191
- isFramework: isFramework)
213
+ isFramework: isFramework,
214
+ swiftOverlayDependencies: swiftOverlayDependencies)
192
215
}
193
216
194
217
/// Construct a `SwiftPrebuiltExternalModuleDetails` from a `swiftscan_module_details_t` reference
0 commit comments