@@ -87,10 +87,13 @@ private extension SwiftScan {
87
87
let moduleId = try decodeModuleNameAndKind ( from: encodedModuleName)
88
88
89
89
// Decode module path and source file locations
90
- let modulePath = try toSwiftString ( api. swiftscan_module_info_get_module_path ( moduleInfoRef) )
91
- let sourceFiles : [ String ] ?
90
+ let modulePathStr = try toSwiftString ( api. swiftscan_module_info_get_module_path ( moduleInfoRef) )
91
+ let modulePath = TextualVirtualPath ( path: try VirtualPath ( path: modulePathStr) )
92
+ let sourceFiles : [ TextualVirtualPath ] ?
92
93
if let sourceFilesSetRef = api. swiftscan_module_info_get_source_files ( moduleInfoRef) {
93
- sourceFiles = try toSwiftStringArray ( sourceFilesSetRef. pointee)
94
+ sourceFiles = try toSwiftStringArray ( sourceFilesSetRef. pointee) . map {
95
+ TextualVirtualPath ( path: try VirtualPath ( path: $0) )
96
+ }
94
97
} else {
95
98
sourceFiles = nil
96
99
}
@@ -139,17 +142,17 @@ private extension SwiftScan {
139
142
func constructSwiftTextualModuleDetails( from moduleDetailsRef: swiftscan_module_details_t )
140
143
throws -> SwiftModuleDetails {
141
144
let moduleInterfacePath =
142
- try getOptionalStringDetail ( from: moduleDetailsRef,
143
- using: api. swiftscan_swift_textual_detail_get_module_interface_path)
145
+ try getOptionalPathDetail ( from: moduleDetailsRef,
146
+ using: api. swiftscan_swift_textual_detail_get_module_interface_path)
144
147
let compiledModuleCandidates =
145
- try getOptionalStringArrayDetail ( from: moduleDetailsRef,
146
- using: api. swiftscan_swift_textual_detail_get_compiled_module_candidates)
148
+ try getOptionalPathArrayDetail ( from: moduleDetailsRef,
149
+ using: api. swiftscan_swift_textual_detail_get_compiled_module_candidates)
147
150
let bridgingHeaderPath =
148
- try getOptionalStringDetail ( from: moduleDetailsRef,
149
- using: api. swiftscan_swift_textual_detail_get_bridging_header_path)
151
+ try getOptionalPathDetail ( from: moduleDetailsRef,
152
+ using: api. swiftscan_swift_textual_detail_get_bridging_header_path)
150
153
let bridgingSourceFiles =
151
- try getOptionalStringArrayDetail ( from: moduleDetailsRef,
152
- using: api. swiftscan_swift_textual_detail_get_bridging_source_files)
154
+ try getOptionalPathArrayDetail ( from: moduleDetailsRef,
155
+ using: api. swiftscan_swift_textual_detail_get_bridging_source_files)
153
156
let commandLine =
154
157
try getOptionalStringArrayDetail ( from: moduleDetailsRef,
155
158
using: api. swiftscan_swift_textual_detail_get_command_line)
@@ -171,29 +174,29 @@ private extension SwiftScan {
171
174
func constructSwiftBinaryModuleDetails( from moduleDetailsRef: swiftscan_module_details_t )
172
175
throws -> SwiftPrebuiltExternalModuleDetails {
173
176
let compiledModulePath =
174
- try getStringDetail ( from: moduleDetailsRef,
175
- using: api. swiftscan_swift_binary_detail_get_compiled_module_path,
176
- fieldName: " swift_binary_detail.compiledModulePath " )
177
+ try getPathDetail ( from: moduleDetailsRef,
178
+ using: api. swiftscan_swift_binary_detail_get_compiled_module_path,
179
+ fieldName: " swift_binary_detail.compiledModulePath " )
177
180
let moduleDocPath =
178
- try getOptionalStringDetail ( from: moduleDetailsRef,
179
- using: api. swiftscan_swift_binary_detail_get_module_doc_path)
181
+ try getOptionalPathDetail ( from: moduleDetailsRef,
182
+ using: api. swiftscan_swift_binary_detail_get_module_doc_path)
180
183
let moduleSourceInfoPath =
181
- try getOptionalStringDetail ( from: moduleDetailsRef,
182
- using: api. swiftscan_swift_binary_detail_get_module_source_info_path)
183
- return SwiftPrebuiltExternalModuleDetails ( compiledModulePath: compiledModulePath,
184
- moduleDocPath: moduleDocPath,
185
- moduleSourceInfoPath: moduleSourceInfoPath)
184
+ try getOptionalPathDetail ( from: moduleDetailsRef,
185
+ using: api. swiftscan_swift_binary_detail_get_module_source_info_path)
186
+ return try SwiftPrebuiltExternalModuleDetails ( compiledModulePath: compiledModulePath,
187
+ moduleDocPath: moduleDocPath,
188
+ moduleSourceInfoPath: moduleSourceInfoPath)
186
189
}
187
190
188
191
/// Construct a `SwiftPlaceholderModuleDetails` from a `swiftscan_module_details_t` reference
189
192
func constructPlaceholderModuleDetails( from moduleDetailsRef: swiftscan_module_details_t )
190
193
throws -> SwiftPlaceholderModuleDetails {
191
194
let moduleDocPath =
192
- try getOptionalStringDetail ( from: moduleDetailsRef,
193
- using: api. swiftscan_swift_placeholder_detail_get_module_doc_path)
195
+ try getOptionalPathDetail ( from: moduleDetailsRef,
196
+ using: api. swiftscan_swift_placeholder_detail_get_module_doc_path)
194
197
let moduleSourceInfoPath =
195
- try getOptionalStringDetail ( from: moduleDetailsRef,
196
- using: api. swiftscan_swift_placeholder_detail_get_module_source_info_path)
198
+ try getOptionalPathDetail ( from: moduleDetailsRef,
199
+ using: api. swiftscan_swift_placeholder_detail_get_module_source_info_path)
197
200
return SwiftPlaceholderModuleDetails ( moduleDocPath: moduleDocPath,
198
201
moduleSourceInfoPath: moduleSourceInfoPath)
199
202
}
@@ -202,9 +205,9 @@ private extension SwiftScan {
202
205
func constructClangModuleDetails( from moduleDetailsRef: swiftscan_module_details_t )
203
206
throws -> ClangModuleDetails {
204
207
let moduleMapPath =
205
- try getStringDetail ( from: moduleDetailsRef,
206
- using: api. swiftscan_clang_detail_get_module_map_path,
207
- fieldName: " clang_detail.moduleMapPath " )
208
+ try getPathDetail ( from: moduleDetailsRef,
209
+ using: api. swiftscan_clang_detail_get_module_map_path,
210
+ fieldName: " clang_detail.moduleMapPath " )
208
211
let contextHash =
209
212
try getStringDetail ( from: moduleDetailsRef,
210
213
using: api. swiftscan_clang_detail_get_context_hash,
@@ -251,6 +254,15 @@ private extension SwiftScan {
251
254
}
252
255
253
256
private extension SwiftScan {
257
+ /// From a `swiftscan_module_details_t` reference, extract a `TextualVirtualPath?` detail using the specified API query
258
+ func getOptionalPathDetail( from detailsRef: swiftscan_module_details_t ,
259
+ using query: ( swiftscan_module_details_t )
260
+ -> swiftscan_string_ref_t )
261
+ throws -> TextualVirtualPath ? {
262
+ let strDetail = try getOptionalStringDetail ( from: detailsRef, using: query)
263
+ return strDetail != nil ? TextualVirtualPath ( path: try VirtualPath ( path: strDetail!) ) : nil
264
+ }
265
+
254
266
/// From a `swiftscan_module_details_t` reference, extract a `String?` detail using the specified API query
255
267
func getOptionalStringDetail( from detailsRef: swiftscan_module_details_t ,
256
268
using query: ( swiftscan_module_details_t )
@@ -262,6 +274,16 @@ private extension SwiftScan {
262
274
return try toSwiftString ( detailRef)
263
275
}
264
276
277
+ /// From a `swiftscan_module_details_t` reference, extract a `TextualVirtualPath` detail using the specified API
278
+ /// query, making sure the reference is to a non-null (and non-empty) path.
279
+ func getPathDetail( from detailsRef: swiftscan_module_details_t ,
280
+ using query: ( swiftscan_module_details_t ) -> swiftscan_string_ref_t ,
281
+ fieldName: String )
282
+ throws -> TextualVirtualPath {
283
+ let strDetail = try getStringDetail ( from: detailsRef, using: query, fieldName: fieldName)
284
+ return TextualVirtualPath ( path: try VirtualPath ( path: strDetail) )
285
+ }
286
+
265
287
/// From a `swiftscan_module_details_t` reference, extract a `String` detail using the specified API query,
266
288
/// making sure the reference is to a non-null (and non-empty) string.
267
289
func getStringDetail( from detailsRef: swiftscan_module_details_t ,
@@ -273,6 +295,18 @@ private extension SwiftScan {
273
295
return result
274
296
}
275
297
298
+ /// From a `swiftscan_module_details_t` reference, extract a `[TextualVirtualPath]?` detail using the specified API
299
+ /// query
300
+ func getOptionalPathArrayDetail( from detailsRef: swiftscan_module_details_t ,
301
+ using query: ( swiftscan_module_details_t )
302
+ -> UnsafeMutablePointer < swiftscan_string_set_t > ? )
303
+ throws -> [ TextualVirtualPath ] ? {
304
+ guard let strArrDetail = try getOptionalStringArrayDetail ( from: detailsRef, using: query) else {
305
+ return nil
306
+ }
307
+ return try strArrDetail. map { TextualVirtualPath ( path: try VirtualPath ( path: $0) ) }
308
+ }
309
+
276
310
/// From a `swiftscan_module_details_t` reference, extract a `[String]?` detail using the specified API query
277
311
func getOptionalStringArrayDetail( from detailsRef: swiftscan_module_details_t ,
278
312
using query: ( swiftscan_module_details_t )
0 commit comments