@@ -313,26 +313,15 @@ extension Workspace {
313313 }
314314 }
315315
316- // should calculate enabled traits here.
317- let explicitlyEnabledTraits = dependency. traits? . filter {
318- guard let condition = $0. condition else { return true }
319- return condition. isSatisfied ( by: node. enabledTraits)
320- } . map ( \. name)
316+ let enabledTraitsSet = workspace. enabledTraitsMap [ dependency. identity]
321317
322318 return try manifestsMap [ dependency. identity] . map { manifest in
323- // Calculate all transitively enabled traits for this manifest.
324-
325- var allEnabledTraits : Set < String > = [ " default " ]
326- if let explicitlyEnabledTraits
327- {
328- allEnabledTraits = Set ( explicitlyEnabledTraits)
329- }
330319
331320 return try GraphLoadingNode (
332321 identity: dependency. identity,
333322 manifest: manifest,
334323 productFilter: dependency. productFilter,
335- enabledTraits: allEnabledTraits
324+ enabledTraits: enabledTraitsSet
336325 )
337326 }
338327 }
@@ -566,10 +555,9 @@ extension Workspace {
566555 return condition. isSatisfied ( by: parentEnabledTraits)
567556 } ) . map ( \. name)
568557
569- let enabledTraitsSet = explicitlyEnabledTraits. flatMap ( { Set ( $0) } )
570- let enabledTraits = enabledTraitsSet? . union ( self . enabledTraitsMap [ dep. identity] ) ?? self . enabledTraitsMap [ dep. identity]
571-
572- self . enabledTraitsMap [ dep. identity] = enabledTraits
558+ if let enabledTraitsSet = explicitlyEnabledTraits. flatMap ( { Set ( $0) } ) {
559+ self . enabledTraitsMap [ dep. identity] = enabledTraitsSet
560+ }
573561
574562 let isDepUsed = try manifest. isPackageDependencyUsed ( dep, enabledTraits: parentEnabledTraits)
575563 return isDepUsed
@@ -612,10 +600,9 @@ extension Workspace {
612600 return condition. isSatisfied ( by: parentEnabledTraits)
613601 } ) . map ( \. name)
614602
615- let enabledTraitsSet = explicitlyEnabledTraits. flatMap ( { Set ( $0) } )
616- let enabledTraits = enabledTraitsSet? . union ( self . enabledTraitsMap [ dep. identity] ) ?? self . enabledTraitsMap [ dep. identity]
617-
618- self . enabledTraitsMap [ dep. identity] = enabledTraits
603+ if let enabledTraitsSet = explicitlyEnabledTraits. flatMap ( { Set ( $0) } ) {
604+ self . enabledTraitsMap [ dep. identity] = enabledTraitsSet
605+ }
619606
620607 let isDepUsed = try manifest. isPackageDependencyUsed ( dep, enabledTraits: parentEnabledTraits)
621608 return isDepUsed
@@ -657,27 +644,14 @@ extension Workspace {
657644 return condition. isSatisfied ( by: node. item. enabledTraits)
658645 } . map ( \. name)
659646
660- var enabledTraitsSet = explicitlyEnabledTraits. flatMap { Set ( $0) }
661- let precomputedTraits = self . enabledTraitsMap [ dependency. identity]
662- // Shouldn't union here if enabledTraitsMap returns "default" and we DO have explicitly enabled traits, since we're meant to flatten the default traits.
663- if precomputedTraits == [ " default " ] ,
664- let enabledTraitsSet {
665- self . enabledTraitsMap [ dependency. identity] = enabledTraitsSet
666- } else {
667- // Unify traits
668- enabledTraitsSet? . formUnion ( precomputedTraits)
669- if let enabledTraitsSet {
670- self . enabledTraitsMap [ dependency. identity] = enabledTraitsSet
671- }
647+ if let enabledTraitsSet = explicitlyEnabledTraits. flatMap ( { Set ( $0) } ) {
648+ let calculatedTraits = try manifest. enabledTraits (
649+ using: enabledTraitsSet,
650+ . init( node. item. manifest)
651+ )
652+ self . enabledTraitsMap [ dependency. identity] = calculatedTraits
672653 }
673654
674- let calculatedTraits = try manifest. enabledTraits (
675- using: self . enabledTraitsMap [ dependency. identity] ,
676- . init( node. item. manifest)
677- )
678-
679- self . enabledTraitsMap [ dependency. identity] = calculatedTraits
680-
681655 // we also compare the location as this function may attempt to load
682656 // dependencies that have the same identity but from a different location
683657 // which is an error case we diagnose an report about in the GraphLoading part which
@@ -688,7 +662,7 @@ extension Workspace {
688662 identity: dependency. identity,
689663 manifest: manifest,
690664 productFilter: dependency. productFilter,
691- enabledTraits: calculatedTraits
665+ enabledTraits: self . enabledTraitsMap [ dependency . identity ]
692666 ) ,
693667 key: dependency. identity
694668 ) :
@@ -783,26 +757,14 @@ extension Workspace {
783757 return condition. isSatisfied ( by: parentTraits)
784758 } . map ( \. name)
785759
786- var enabledTraitsSet = explicitlyEnabledTraits. flatMap { Set ( $0) }
787- let precomputedTraits = self . enabledTraitsMap [ dependency. identity]
788- // Shouldn't union here if enabledTraitsMap returns "default" and we DO have explicitly enabled traits, since we're meant to flatten the default traits.
789- if precomputedTraits == [ " default " ] ,
790- let enabledTraitsSet {
791- self . enabledTraitsMap [ dependency. identity] = enabledTraitsSet
792- } else {
793- // Unify traits
794- enabledTraitsSet? . formUnion ( precomputedTraits)
795- if let enabledTraitsSet {
796- self . enabledTraitsMap [ dependency. identity] = enabledTraitsSet
797- }
760+ if let enabledTraitsSet = explicitlyEnabledTraits. flatMap ( { Set ( $0) } ) {
761+ let calculatedTraits = try manifest. enabledTraits (
762+ using: enabledTraitsSet,
763+ . init( parent)
764+ )
765+ self . enabledTraitsMap [ dependency. identity] = calculatedTraits
798766 }
799767
800- let calculatedTraits = try manifest. enabledTraits (
801- using: self . enabledTraitsMap [ dependency. identity] ,
802- . init( parent)
803- )
804-
805- self . enabledTraitsMap [ dependency. identity] = calculatedTraits
806768 let result = visited. insert ( dependency. identity)
807769 if result. inserted {
808770 try dependencies ( of: manifest, dependency. productFilter)
0 commit comments