Skip to content

Commit 16cb3d2

Browse files
committed
Fix symbol extractor logic for aggregating module info from dependencies
1 parent 08ab8fc commit 16cb3d2

File tree

1 file changed

+7
-27
lines changed

1 file changed

+7
-27
lines changed

Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TAPISymbolExtractorTaskProducer.swift

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -69,33 +69,13 @@ final class TAPISymbolExtractorTaskProducer: PhasedTaskProducer, TaskProducer {
6969
// which in turn depends on the PACKAGE:TARGET target that generates the module map.
7070
var dependenciesModuleMaps = OrderedSet<Path>()
7171
if let configuredTarget = context.configuredTarget {
72-
let currentPlatformFilter = PlatformFilter(scope)
73-
var remainingDependenciesToProcess = configuredTarget.target.dependencies[...]
74-
var encounteredDependencies = Set(remainingDependenciesToProcess.map { $0.guid })
75-
while let dependency = remainingDependenciesToProcess.popFirst() {
76-
if currentPlatformFilter.matches(dependency.platformFilters),
77-
let dependencyTarget = context.workspaceContext.workspace.dynamicTarget(for: dependency.guid, dynamicallyBuildingTargets: context.globalProductPlan.dynamicallyBuildingTargets)
78-
{
79-
// Find the right build parameters for each dependency
80-
let dependencyParameters: BuildParameters
81-
if let otherConfiguredTarget = context.globalProductPlan.planRequest.buildGraph.dependencies(of: configuredTarget).first(where: { $0.target.guid == dependencyTarget.guid }) {
82-
dependencyParameters = otherConfiguredTarget.parameters
83-
} else {
84-
dependencyParameters = context.globalProductPlan.planRequest.buildGraph.buildRequest.buildTargets.first(where: { $0.target.guid == dependencyTarget.guid })?.parameters ?? configuredTarget.parameters
85-
}
86-
87-
let settings = context.settingsForProductReferenceTarget(dependencyTarget, parameters: dependencyParameters)
88-
let dependencyConfiguredTarget = ConfiguredTarget(parameters: dependencyParameters, target: dependencyTarget)
89-
90-
if let moduleInfo = context.globalProductPlan.getModuleInfo(dependencyConfiguredTarget) {
91-
dependenciesModuleMaps.append(moduleInfo.moduleMapPaths.builtPath)
92-
} else if let moduleMapPath = settings.globalScope.evaluate(BuiltinMacros.MODULEMAP_PATH).nilIfEmpty {
93-
dependenciesModuleMaps.append(Path(moduleMapPath))
94-
}
95-
96-
let newDependencies = dependencyConfiguredTarget.target.dependencies.filter { !encounteredDependencies.contains($0.guid) }
97-
encounteredDependencies.formUnion(newDependencies.map { $0.guid} )
98-
remainingDependenciesToProcess.append(contentsOf: newDependencies)
72+
let transitiveClosure = transitiveClosure([configuredTarget], successors: { context.globalProductPlan.dependencies(of: $0) }).result
73+
for dependencyTarget in transitiveClosure {
74+
let settings = context.globalProductPlan.getTargetSettings(dependencyTarget)
75+
if let moduleInfo = context.globalProductPlan.getModuleInfo(dependencyTarget) {
76+
dependenciesModuleMaps.append(moduleInfo.moduleMapPaths.builtPath)
77+
} else if let moduleMapPath = settings.globalScope.evaluate(BuiltinMacros.MODULEMAP_PATH).nilIfEmpty {
78+
dependenciesModuleMaps.append(Path(moduleMapPath))
9979
}
10080
}
10181
}

0 commit comments

Comments
 (0)