@@ -43,13 +43,13 @@ private static void GenerateJoinInterceptor(StringBuilder sb, UsageSiteInfo site
4343 if ( isChainedJoin && site . JoinedEntityTypeName != null )
4444 {
4545 var joinedType = GetShortTypeName ( site . JoinedEntityTypeName ) ;
46- var priorTypes = joinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToList ( ) ;
47- var allTypes = priorTypes . Concat ( new [ ] { joinedType } ) . ToList ( ) ;
46+ var priorTypes = joinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToArray ( ) ;
47+ var allTypes = priorTypes . Concat ( new [ ] { joinedType } ) . ToArray ( ) ;
4848
4949 // Determine receiver and return builder type names
50- var receiverBuilderName = GetJoinedBuilderTypeName ( priorTypes . Count ) ;
50+ var receiverBuilderName = GetJoinedBuilderTypeName ( priorTypes . Length ) ;
5151 var concreteReceiverBuilderName = ToConcreteTypeName ( receiverBuilderName ) ;
52- var returnBuilderName = GetJoinedBuilderTypeName ( allTypes . Count ) ;
52+ var returnBuilderName = GetJoinedBuilderTypeName ( allTypes . Length ) ;
5353 var receiverTypeArgs = string . Join ( ", " , priorTypes ) ;
5454 var returnTypeArgs = string . Join ( ", " , allTypes ) ;
5555 var funcTypeArgs = string . Join ( ", " , allTypes ) + ", bool" ;
@@ -84,7 +84,7 @@ private static void GenerateJoinInterceptor(StringBuilder sb, UsageSiteInfo site
8484 if ( isFirstInChain )
8585 {
8686 // For chained join first-in-chain, the incoming builder is the pre-join type
87- var preJoinBuilderType = GetJoinedConcreteBuilderTypeName ( priorTypes . Count , priorTypes . ToArray ( ) ) ;
87+ var preJoinBuilderType = GetJoinedConcreteBuilderTypeName ( priorTypes . Length , priorTypes ) ;
8888 EmitCarrierChainEntry ( sb , carrier , prebuiltChain , site , preJoinBuilderType , joinReturnType , null , siteParams , globalParamOffset ) ;
8989 }
9090 else
@@ -279,11 +279,11 @@ private static string GetJoinedBuilderTypeName(int entityCount)
279279 /// <summary>
280280 /// Generates a Where() interceptor for joined query builders.
281281 /// </summary>
282- private static void GenerateJoinedWhereInterceptor ( StringBuilder sb , UsageSiteInfo site , string methodName , List < CachedExtractorField > staticFields , int ? clauseBit = null ,
282+ private static void GenerateJoinedWhereInterceptor ( StringBuilder sb , UsageSiteInfo site , string methodName , List < CachedExtractorField > ? methodFields , int ? clauseBit = null ,
283283 PrebuiltChainInfo ? prebuiltChain = null , bool isFirstInChain = false , CarrierClassInfo ? carrier = null )
284284 {
285- var entityTypes = site . JoinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToList ( ) ;
286- var builderName = GetJoinedBuilderTypeName ( entityTypes . Count ) ;
285+ var entityTypes = site . JoinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToArray ( ) ;
286+ var builderName = GetJoinedBuilderTypeName ( entityTypes . Length ) ;
287287 var concreteBuilderName = ToConcreteTypeName ( builderName ) ;
288288 var thisType = site . BuilderTypeName ;
289289 var returnType = ToReturnTypeName ( thisType ) ;
@@ -295,7 +295,7 @@ private static void GenerateJoinedWhereInterceptor(StringBuilder sb, UsageSiteIn
295295 var exprParamName = hasResolvableCapturedParams ? "expr" : "_" ;
296296 var bitSuffix = ClauseBitSuffix ( clauseBit ) ;
297297
298- var methodFields = staticFields . Where ( f => f . MethodName == methodName ) . ToList ( ) ;
298+ methodFields ??= new List < CachedExtractorField > ( ) ;
299299 if ( methodFields . Count > 0 )
300300 {
301301 sb . AppendLine ( $ " [UnconditionalSuppressMessage(\" Trimming\" , \" IL2075\" ,") ;
@@ -312,8 +312,8 @@ private static void GenerateJoinedWhereInterceptor(StringBuilder sb, UsageSiteIn
312312 {
313313 // Tuple element types could not be resolved by the semantic model (generated entity types).
314314 // Use arity-matching generic parameters so the compiler infers the concrete TResult.
315- var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "T{ i } ") ) ;
316- var constraints = string . Join ( " " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "where T{ i } : class") ) ;
315+ var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "T{ i } ") ) ;
316+ var constraints = string . Join ( " " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "where T{ i } : class") ) ;
317317 sb . AppendLine ( $ " public static { builderName } <{ allTypeParams } , TResult> { methodName } <{ allTypeParams } , TResult>(") ;
318318 sb . AppendLine ( $ " this { thisBuilderName } <{ allTypeParams } , TResult> builder,") ;
319319 sb . AppendLine ( $ " Expression<Func<{ allTypeParams } , bool>> { exprParamName } ) { constraints } ") ;
@@ -353,7 +353,7 @@ private static void GenerateJoinedWhereInterceptor(StringBuilder sb, UsageSiteIn
353353 globalParamOffset += clause . Site . ClauseInfo . Parameters . Count ;
354354 }
355355
356- var joinedBuilderTypeName = GetJoinedConcreteBuilderTypeName ( entityTypes . Count , entityTypes . ToArray ( ) ) ;
356+ var joinedBuilderTypeName = GetJoinedConcreteBuilderTypeName ( entityTypes . Length , entityTypes ) ;
357357 var returnInterface = site . ResultTypeName != null
358358 ? $ "{ builderName } <{ typeArgs } , { SanitizeTupleResultType ( GetShortTypeName ( site . ResultTypeName ) ) } >"
359359 : $ "{ builderName } <{ typeArgs } >";
@@ -381,7 +381,7 @@ private static void GenerateJoinedWhereInterceptor(StringBuilder sb, UsageSiteIn
381381 var isBrokenTuple = resultType . Contains ( "object" ) && resultType . StartsWith ( "(" ) ;
382382 if ( isBrokenTuple )
383383 {
384- var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "T{ i } ") ) ;
384+ var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "T{ i } ") ) ;
385385 sb . AppendLine ( $ " var __b = Unsafe.As<{ concreteBuilderName } <{ allTypeParams } , TResult>>(builder);") ;
386386 }
387387 else
@@ -481,8 +481,8 @@ private static void GenerateJoinedWhereInterceptor(StringBuilder sb, UsageSiteIn
481481 private static void GenerateJoinedOrderByInterceptor ( StringBuilder sb , UsageSiteInfo site , string methodName , int ? clauseBit = null ,
482482 PrebuiltChainInfo ? prebuiltChain = null , bool isFirstInChain = false , CarrierClassInfo ? carrier = null )
483483 {
484- var entityTypes = site . JoinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToList ( ) ;
485- var builderName = GetJoinedBuilderTypeName ( entityTypes . Count ) ;
484+ var entityTypes = site . JoinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToArray ( ) ;
485+ var builderName = GetJoinedBuilderTypeName ( entityTypes . Length ) ;
486486 var concreteBuilderName = ToConcreteTypeName ( builderName ) ;
487487 var thisType = site . BuilderTypeName ;
488488 var returnType = ToReturnTypeName ( thisType ) ;
@@ -516,8 +516,8 @@ private static void GenerateJoinedOrderByInterceptor(StringBuilder sb, UsageSite
516516 {
517517 // Arity-matching: include all type params with class constraints.
518518 // Also used when tuple result type has unresolved element types (broken tuple).
519- var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "T{ i } ") ) ;
520- var constraints = string . Join ( " " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "where T{ i } : class") ) ;
519+ var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "T{ i } ") ) ;
520+ var constraints = string . Join ( " " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "where T{ i } : class") ) ;
521521 sb . AppendLine ( $ " public static { builderName } <{ allTypeParams } , TResult> { methodName } <{ allTypeParams } , TResult, TKey>(") ;
522522 sb . AppendLine ( $ " this { thisBuilderName } <{ allTypeParams } , TResult> builder,") ;
523523 sb . AppendLine ( $ " Expression<Func<{ allTypeParams } , TKey>> _,") ;
@@ -535,8 +535,8 @@ private static void GenerateJoinedOrderByInterceptor(StringBuilder sb, UsageSite
535535 }
536536 else
537537 {
538- var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "T{ i } ") ) ;
539- var constraints = string . Join ( " " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "where T{ i } : class") ) ;
538+ var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "T{ i } ") ) ;
539+ var constraints = string . Join ( " " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "where T{ i } : class") ) ;
540540 sb . AppendLine ( $ " public static { builderName } <{ allTypeParams } > { methodName } <{ allTypeParams } , TKey>(") ;
541541 sb . AppendLine ( $ " this { thisBuilderName } <{ allTypeParams } > builder,") ;
542542 sb . AppendLine ( $ " Expression<Func<{ allTypeParams } , TKey>> _,") ;
@@ -566,7 +566,7 @@ private static void GenerateJoinedOrderByInterceptor(StringBuilder sb, UsageSite
566566 globalParamOffset += clause . Site . ClauseInfo . Parameters . Count ;
567567 }
568568
569- var joinedBuilderTypeName = GetJoinedConcreteBuilderTypeName ( entityTypes . Count , entityTypes . ToArray ( ) ) ;
569+ var joinedBuilderTypeName = GetJoinedConcreteBuilderTypeName ( entityTypes . Length , entityTypes ) ;
570570 var returnInterface = site . ResultTypeName != null
571571 ? $ "{ builderName } <{ typeArgs } , { SanitizeTupleResultType ( GetShortTypeName ( site . ResultTypeName ) ) } >"
572572 : $ "{ builderName } <{ typeArgs } >";
@@ -595,7 +595,7 @@ private static void GenerateJoinedOrderByInterceptor(StringBuilder sb, UsageSite
595595 }
596596 else if ( site . ResultTypeName != null )
597597 {
598- var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "T{ i } ") ) ;
598+ var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "T{ i } ") ) ;
599599 sb . AppendLine ( $ " var __b = Unsafe.As<{ concreteBuilderName } <{ allTypeParams } , TResult>>(builder);") ;
600600 }
601601 else if ( keyType != null )
@@ -604,7 +604,7 @@ private static void GenerateJoinedOrderByInterceptor(StringBuilder sb, UsageSite
604604 }
605605 else
606606 {
607- var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Count ) . Select ( i => $ "T{ i } ") ) ;
607+ var allTypeParams = string . Join ( ", " , Enumerable . Range ( 1 , entityTypes . Length ) . Select ( i => $ "T{ i } ") ) ;
608608 sb . AppendLine ( $ " var __b = Unsafe.As<{ concreteBuilderName } <{ allTypeParams } >>(builder);") ;
609609 }
610610 var builderVar = "__b" ;
@@ -654,8 +654,8 @@ private static void GenerateJoinedOrderByInterceptor(StringBuilder sb, UsageSite
654654 private static void GenerateJoinedSelectInterceptor ( StringBuilder sb , UsageSiteInfo site , string methodName ,
655655 PrebuiltChainInfo ? prebuiltChain = null , bool isFirstInChain = false , CarrierClassInfo ? carrier = null )
656656 {
657- var entityTypes = site . JoinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToList ( ) ;
658- var builderName = GetJoinedBuilderTypeName ( entityTypes . Count ) ;
657+ var entityTypes = site . JoinedEntityTypeNames ! . Select ( GetShortTypeName ) . ToArray ( ) ;
658+ var builderName = GetJoinedBuilderTypeName ( entityTypes . Length ) ;
659659 var concreteBuilderName = ToConcreteTypeName ( builderName ) ;
660660 var thisType = site . BuilderTypeName ;
661661 var returnType = ToReturnTypeName ( thisType ) ;
@@ -692,7 +692,7 @@ private static void GenerateJoinedSelectInterceptor(StringBuilder sb, UsageSiteI
692692 if ( clause . Site . ClauseInfo != null )
693693 globalParamOffset += clause . Site . ClauseInfo . Parameters . Count ;
694694 }
695- var joinedBuilderType = GetJoinedConcreteBuilderTypeName ( entityTypes . Count , entityTypes . ToArray ( ) ) ;
695+ var joinedBuilderType = GetJoinedConcreteBuilderTypeName ( entityTypes . Length , entityTypes ) ;
696696 int ? clauseBit = null ;
697697 EmitCarrierChainEntry ( sb , carrier , prebuiltChain , site , joinedBuilderType , targetInterface , clauseBit , siteParams , globalParamOffset ) ;
698698 }
0 commit comments