@@ -24,6 +24,7 @@ class ModuleAliasTracker {
24
24
var parentToChildProducts = [ String: [ String] ] ( )
25
25
var parentToChildIDs = [ PackageIdentity: [ PackageIdentity] ] ( )
26
26
var childToParentID = [ PackageIdentity: PackageIdentity] ( )
27
+ var appliedAliases = Set < String > ( )
27
28
28
29
init ( ) { }
29
30
func addTargetAliases( targets: [ Target ] , package : PackageIdentity ) throws {
@@ -63,7 +64,7 @@ class ModuleAliasTracker {
63
64
}
64
65
65
66
for (originalName, newName) in aliases {
66
- let model = ModuleAliasModel ( name: originalName, alias: newName, originPackage: originPackage, consumingPackage: consumingPackage)
67
+ let model = ModuleAliasModel ( name: originalName, alias: newName, originPackage: originPackage, consumingPackage: consumingPackage, productName : productName )
67
68
idToAliasMap [ originPackage, default: [ : ] ] [ productID, default: [ ] ] . append ( model)
68
69
aliasMap [ productID, default: [ ] ] . append ( model)
69
70
}
@@ -163,13 +164,22 @@ class ModuleAliasTracker {
163
164
164
165
for relTarget in relevantTargets {
165
166
if let val = lookupAlias ( key: relTarget. name, in: aliasBuffer) {
167
+ appliedAliases. insert ( relTarget. name)
166
168
relTarget. addModuleAlias ( for: relTarget. name, as: val)
167
169
if let prechainVal = aliasBuffer [ relTarget. name] ,
168
170
prechainVal. alias != val {
169
171
relTarget. addPrechainModuleAlias ( for: relTarget. name, as: prechainVal. alias)
172
+ appliedAliases. insert ( prechainVal. alias)
170
173
relTarget. addPrechainModuleAlias ( for: prechainVal. alias, as: val)
171
174
observabilityScope. emit ( info: " Module alias ' \( prechainVal. alias) ' defined in package ' \( prechainVal. consumingPackage) ' for target ' \( relTarget. name) ' in package/product ' \( productID) ' is overridden by alias ' \( val) '; if this override is not intended, remove ' \( val) ' from 'moduleAliases' in its manifest " )
172
175
aliasBuffer. removeValue ( forKey: prechainVal. alias)
176
+
177
+ // Since we're overriding an alias here, we have to pretend it was applied to avoid follow-on warnings.
178
+ var currentAlias : String ? = val
179
+ while let _currentAlias = currentAlias, !appliedAliases. contains ( _currentAlias) {
180
+ appliedAliases. insert ( _currentAlias)
181
+ currentAlias = aliasBuffer. values. first { $0. alias == _currentAlias } ? . name
182
+ }
173
183
}
174
184
aliasBuffer. removeValue ( forKey: relTarget. name)
175
185
}
@@ -257,6 +267,7 @@ class ModuleAliasTracker {
257
267
for target in productTargets {
258
268
let depAliases = target. recursiveDependentTargets. compactMap { $0. moduleAliases} . flatMap { $0}
259
269
for (key, alias) in depAliases {
270
+ appliedAliases. insert ( key)
260
271
target. addModuleAlias ( for: key, as: alias)
261
272
}
262
273
}
@@ -269,6 +280,16 @@ class ModuleAliasTracker {
269
280
}
270
281
}
271
282
283
+ func diagnoseUnappliedAliases( observabilityScope: ObservabilityScope ) {
284
+ for aliasList in aliasMap. values {
285
+ for productAlias in aliasList {
286
+ if !appliedAliases. contains ( productAlias. name) {
287
+ observabilityScope. emit ( warning: " module alias for target ' \( productAlias. name) ', declared in package ' \( productAlias. consumingPackage) ', does not match any recursive target dependency of product ' \( productAlias. productName) ' from package ' \( productAlias. originPackage) ' " )
288
+ }
289
+ }
290
+ }
291
+ }
292
+
272
293
private func chainModuleAliases( targets: [ Target ] ,
273
294
checkedTargets: [ Target ] ,
274
295
targetAliases: [ String : [ String ] ] ,
@@ -336,11 +357,13 @@ class ModuleAliasTracker {
336
357
337
358
for target in targets {
338
359
for (key, val) in aliasDict {
360
+ appliedAliases. insert ( key)
339
361
target. addModuleAlias ( for: key, as: val)
340
362
}
341
363
for (key, valList) in prechainAliasDict {
342
364
if let val = valList. first,
343
365
valList. count <= 1 {
366
+ appliedAliases. insert ( key)
344
367
target. addModuleAlias ( for: key, as: val)
345
368
target. addPrechainModuleAlias ( for: key, as: val)
346
369
}
@@ -401,12 +424,14 @@ class ModuleAliasModel {
401
424
var alias : String
402
425
let originPackage : PackageIdentity
403
426
let consumingPackage : PackageIdentity
427
+ let productName : String
404
428
405
- init ( name: String , alias: String , originPackage: PackageIdentity , consumingPackage: PackageIdentity ) {
429
+ init ( name: String , alias: String , originPackage: PackageIdentity , consumingPackage: PackageIdentity , productName : String ) {
406
430
self . name = name
407
431
self . alias = alias
408
432
self . originPackage = originPackage
409
433
self . consumingPackage = consumingPackage
434
+ self . productName = productName
410
435
}
411
436
}
412
437
0 commit comments