@@ -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 . 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 . 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 . enabledTraits ( 
649+                             using:  enabledTraitsSet, 
650+                             . init( node. item. manifest) 
651+                         ) 
652+                         self . enabledTraitsMap [ dependency. identity]  =  calculatedTraits
672653                    } 
673654
674-                     let  calculatedTraits  =  try . 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 . enabledTraits ( 
762+                             using:  enabledTraitsSet, 
763+                             . init( parent) 
764+                         ) 
765+                         self . enabledTraitsMap [ dependency. identity]  =  calculatedTraits
798766                    } 
799767
800-                     let  calculatedTraits  =  try . 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