Skip to content

Commit 9cdabfc

Browse files
committed
[Explicit Module Builds] When '-explain-module-dependency' encounters the target Swift module, continue enumerating other possible paths
1 parent ad8a328 commit 9cdabfc

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

Sources/SwiftDriver/ExplicitModuleBuilds/InterModuleDependencies/CommonDependencyOperations.swift

+5-6
Original file line numberDiff line numberDiff line change
@@ -252,22 +252,22 @@ extension InterModuleDependencyGraph {
252252
internal extension InterModuleDependencyGraph {
253253
func explainDependency(dependencyModuleName: String) throws -> [[ModuleDependencyId]]? {
254254
guard modules.contains(where: { $0.key.moduleName == dependencyModuleName }) else { return nil }
255-
var results = [[ModuleDependencyId]]()
255+
var results = Set<[ModuleDependencyId]>()
256256
try findAllPaths(source: .swift(mainModuleName),
257257
to: dependencyModuleName,
258258
pathSoFar: [.swift(mainModuleName)],
259259
results: &results)
260-
return Array(results)
260+
return results.sorted(by: { $0.count < $1.count })
261261
}
262262

263263

264264
private func findAllPaths(source: ModuleDependencyId,
265265
to moduleName: String,
266266
pathSoFar: [ModuleDependencyId],
267-
results: inout [[ModuleDependencyId]]) throws {
267+
results: inout Set<[ModuleDependencyId]>) throws {
268268
let sourceInfo = try moduleInfo(of: source)
269269
// If the source is our target, we are done
270-
guard source.moduleName != moduleName else {
270+
if source.moduleName == moduleName {
271271
// If the source is a target Swift module, also check if it
272272
// depends on a corresponding Clang module with the same name.
273273
// If it does, add it to the path as well.
@@ -276,8 +276,7 @@ internal extension InterModuleDependencyGraph {
276276
dependencies.contains(.clang(moduleName)) {
277277
completePath.append(.clang(moduleName))
278278
}
279-
results.append(completePath)
280-
return
279+
results.insert(completePath)
281280
}
282281

283282
var allDependencies = sourceInfo.directDependencies ?? []

Tests/SwiftDriverTests/ExplicitModuleBuildTests.swift

+1
Original file line numberDiff line numberDiff line change
@@ -2003,6 +2003,7 @@ final class ExplicitModuleBuildTests: XCTestCase {
20032003
print(diag.behavior)
20042004
print(diag.message)
20052005
}
2006+
XCTAssertEqual(driver.diagnosticEngine.diagnostics.filter { $0.behavior == .note}.count, 2)
20062007
XCTAssertTrue(driver.diagnosticEngine.diagnostics.contains { $0.behavior == .note &&
20072008
$0.message.text == "[testTraceDependency] -> [A] -> [A](ObjC)"})
20082009
XCTAssertTrue(driver.diagnosticEngine.diagnostics.contains { $0.behavior == .note &&

0 commit comments

Comments
 (0)