Skip to content

Commit b2326f9

Browse files
committed
[Dependency Scanning] Adapt to the TextualVirtualPath interface when constructing the InterModuleDependencyGraph
1 parent 88039a1 commit b2326f9

File tree

4 files changed

+74
-39
lines changed

4 files changed

+74
-39
lines changed

Sources/SwiftDriver/ExplicitModuleBuilds/InterModuleDependencies/CommonDependencyOperations.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ import TSCBasic
3333

3434
let newModuleId: ModuleDependencyId = .swiftPrebuiltExternal(externalModuleId.moduleName)
3535
let newExternalModuleDetails =
36-
SwiftPrebuiltExternalModuleDetails(compiledModulePath: externalModulePath.description)
37-
let newInfo = ModuleInfo(modulePath: externalModulePath.description,
36+
try SwiftPrebuiltExternalModuleDetails(compiledModulePath:
37+
TextualVirtualPath(path: .absolute(externalModulePath)))
38+
let newInfo = ModuleInfo(modulePath: TextualVirtualPath(path: .absolute(externalModulePath)),
3839
sourceFiles: [],
3940
directDependencies: currentInfo.directDependencies,
4041
details: .swiftPrebuiltExternal(newExternalModuleDetails))

Sources/SwiftDriver/ExplicitModuleBuilds/InterModuleDependencies/InterModuleDependencyGraph.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,12 @@ public struct SwiftPrebuiltExternalModuleDetails: Codable {
127127
/// The path to the .swiftSourceInfo file.
128128
public var moduleSourceInfoPath: TextualVirtualPath?
129129

130-
public init(compiledModulePath: VirtualPath,
131-
moduleDocPath: VirtualPath? = nil,
132-
moduleSourceInfoPath: VirtualPath? = nil) throws {
133-
self.compiledModulePath = TextualVirtualPath(path: compiledModulePath)
134-
self.moduleDocPath = moduleDocPath != nil ? TextualVirtualPath(path: moduleDocPath!) : nil
135-
self.moduleSourceInfoPath =
136-
moduleSourceInfoPath != nil ? TextualVirtualPath(path: moduleSourceInfoPath!) : nil
130+
public init(compiledModulePath: TextualVirtualPath,
131+
moduleDocPath: TextualVirtualPath? = nil,
132+
moduleSourceInfoPath: TextualVirtualPath? = nil) throws {
133+
self.compiledModulePath = compiledModulePath
134+
self.moduleDocPath = moduleDocPath
135+
self.moduleSourceInfoPath = moduleSourceInfoPath
137136
}
138137
}
139138

Sources/SwiftDriver/ExplicitModuleBuilds/PlaceholderDependencyResolution.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,9 @@ fileprivate extension InterModuleDependencyGraph {
122122
}
123123

124124
let newExternalModuleDetails =
125-
SwiftPrebuiltExternalModuleDetails(compiledModulePath: placeholderPath.description)
126-
let newInfo = ModuleInfo(modulePath: placeholderPath.description,
125+
try SwiftPrebuiltExternalModuleDetails(compiledModulePath:
126+
TextualVirtualPath(path: .absolute(placeholderPath)))
127+
let newInfo = ModuleInfo(modulePath: TextualVirtualPath(path: .absolute(placeholderPath)),
127128
sourceFiles: [],
128129
directDependencies: externalModuleInfo.directDependencies,
129130
details: .swiftPrebuiltExternal(newExternalModuleDetails))

Sources/SwiftDriver/SwiftScan/DependencyGraphBuilder.swift

Lines changed: 62 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,13 @@ private extension SwiftScan {
8787
let moduleId = try decodeModuleNameAndKind(from: encodedModuleName)
8888

8989
// 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]?
9293
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+
}
9497
} else {
9598
sourceFiles = nil
9699
}
@@ -139,17 +142,17 @@ private extension SwiftScan {
139142
func constructSwiftTextualModuleDetails(from moduleDetailsRef: swiftscan_module_details_t)
140143
throws -> SwiftModuleDetails {
141144
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)
144147
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)
147150
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)
150153
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)
153156
let commandLine =
154157
try getOptionalStringArrayDetail(from: moduleDetailsRef,
155158
using: api.swiftscan_swift_textual_detail_get_command_line)
@@ -171,29 +174,29 @@ private extension SwiftScan {
171174
func constructSwiftBinaryModuleDetails(from moduleDetailsRef: swiftscan_module_details_t)
172175
throws -> SwiftPrebuiltExternalModuleDetails {
173176
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")
177180
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)
180183
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)
186189
}
187190

188191
/// Construct a `SwiftPlaceholderModuleDetails` from a `swiftscan_module_details_t` reference
189192
func constructPlaceholderModuleDetails(from moduleDetailsRef: swiftscan_module_details_t)
190193
throws -> SwiftPlaceholderModuleDetails {
191194
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)
194197
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)
197200
return SwiftPlaceholderModuleDetails(moduleDocPath: moduleDocPath,
198201
moduleSourceInfoPath: moduleSourceInfoPath)
199202
}
@@ -202,9 +205,9 @@ private extension SwiftScan {
202205
func constructClangModuleDetails(from moduleDetailsRef: swiftscan_module_details_t)
203206
throws -> ClangModuleDetails {
204207
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")
208211
let contextHash =
209212
try getStringDetail(from: moduleDetailsRef,
210213
using: api.swiftscan_clang_detail_get_context_hash,
@@ -251,6 +254,15 @@ private extension SwiftScan {
251254
}
252255

253256
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+
254266
/// From a `swiftscan_module_details_t` reference, extract a `String?` detail using the specified API query
255267
func getOptionalStringDetail(from detailsRef: swiftscan_module_details_t,
256268
using query: (swiftscan_module_details_t)
@@ -262,6 +274,16 @@ private extension SwiftScan {
262274
return try toSwiftString(detailRef)
263275
}
264276

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+
265287
/// From a `swiftscan_module_details_t` reference, extract a `String` detail using the specified API query,
266288
/// making sure the reference is to a non-null (and non-empty) string.
267289
func getStringDetail(from detailsRef: swiftscan_module_details_t,
@@ -273,6 +295,18 @@ private extension SwiftScan {
273295
return result
274296
}
275297

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+
276310
/// From a `swiftscan_module_details_t` reference, extract a `[String]?` detail using the specified API query
277311
func getOptionalStringArrayDetail(from detailsRef: swiftscan_module_details_t,
278312
using query: (swiftscan_module_details_t)

0 commit comments

Comments
 (0)