@@ -1685,7 +1685,7 @@ private static IEnumerable<bool[]> GenerateValueFlagCombinations(EquatableArray<
16851685 {
16861686 int [ ] valueableIndices = parameters
16871687 . Select ( ( p , i ) => ( p , i ) )
1688- . Where ( x => x . p . CanBeExplicitValue ( ) )
1688+ . Where ( x => x . p . CanUseNullableParameterOverload ( ) )
16891689 . Select ( x => x . i )
16901690 . ToArray ( ) ;
16911691 int valueableCount = valueableIndices . Length ;
@@ -1754,20 +1754,20 @@ private static void DefineSetupInterface(StringBuilder sb, Class @class, MemberT
17541754 indexer . MemberType == memberType ;
17551755 foreach ( Property indexer in @class . AllProperties ( ) . Where ( indexerPredicate ) )
17561756 {
1757- AppendIndexerSetupDefinition ( sb , indexer ) ;
1757+ AppendIndexerSetupDefinition ( sb , indexer , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
17581758 if ( indexer . IndexerParameters ! . Value . Count <= MaxExplicitParameters )
17591759 {
17601760 foreach ( bool [ ] valueFlags in GenerateValueFlagCombinations ( indexer . IndexerParameters . Value ) )
17611761 {
1762- AppendIndexerSetupDefinition ( sb , indexer , valueFlags ) ;
1762+ AppendIndexerSetupDefinition ( sb , indexer , valueFlags , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
17631763 }
17641764 }
17651765 else
17661766 {
1767- bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
1767+ bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
17681768 if ( allValueFlags . Any ( f => f ) )
17691769 {
1770- AppendIndexerSetupDefinition ( sb , indexer , allValueFlags ) ;
1770+ AppendIndexerSetupDefinition ( sb , indexer , allValueFlags , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
17711771 }
17721772 }
17731773 }
@@ -1809,7 +1809,7 @@ private static void DefineSetupInterface(StringBuilder sb, Class @class, MemberT
18091809 }
18101810 else
18111811 {
1812- bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
1812+ bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
18131813 if ( allValueFlags . Any ( f => f ) )
18141814 {
18151815 AppendMethodSetupDefinition ( sb , @class , method , false , valueFlags : allValueFlags , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
@@ -1941,7 +1941,7 @@ private static void AppendMethodSetupDefinition(StringBuilder sb, Class @class,
19411941 else
19421942 {
19431943 sb . Append ( parameter . ToParameter ( ) ) ;
1944- if ( parameter . CanBeNullable ( ) )
1944+ if ( parameter . CanUseNullableParameterOverload ( ) )
19451945 {
19461946 sb . Append ( '?' ) ;
19471947 }
@@ -2016,7 +2016,7 @@ private static void ImplementSetupInterface(StringBuilder sb, Class @class, stri
20162016 }
20172017 else
20182018 {
2019- bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
2019+ bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
20202020 if ( allValueFlags . Any ( f => f ) )
20212021 {
20222022 AppendIndexerSetupImplementation ( sb , indexer , mockRegistryName , setupName , allValueFlags ) ;
@@ -2061,7 +2061,7 @@ private static void ImplementSetupInterface(StringBuilder sb, Class @class, stri
20612061 }
20622062 else
20632063 {
2064- bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
2064+ bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
20652065 if ( allValueFlags . Any ( f => f ) )
20662066 {
20672067 AppendMethodSetupImplementation ( sb , method , mockRegistryName , setupName , false , valueFlags : allValueFlags ) ;
@@ -2140,7 +2140,7 @@ private static void AppendMethodSetupImplementation(StringBuilder sb, Method met
21402140 else
21412141 {
21422142 sb . Append ( parameter . ToParameter ( ) ) ;
2143- if ( parameter . CanBeNullable ( ) )
2143+ if ( parameter . CanUseNullableParameterOverload ( ) )
21442144 {
21452145 sb . Append ( '?' ) ;
21462146 }
@@ -2225,10 +2225,15 @@ private static void AppendMethodSetupImplementation(StringBuilder sb, Method met
22252225 sb . AppendLine ( ) ;
22262226 }
22272227
2228- private static void AppendIndexerSetupDefinition ( StringBuilder sb , Property indexer , bool [ ] ? valueFlags = null )
2228+ private static void AppendIndexerSetupDefinition ( StringBuilder sb , Property indexer , bool [ ] ? valueFlags = null , bool hasOverloadResolutionPriority = false )
22292229 {
22302230 sb . AppendXmlSummary (
22312231 $ "Setup for the { indexer . Type . Fullname . EscapeForXmlDoc ( ) } indexer <see cref=\" { indexer . ContainingType . EscapeForXmlDoc ( ) } .this[{ string . Join ( ", " , indexer . IndexerParameters ! . Value . Select ( p => p . RefKind . GetString ( ) + p . Type . Fullname . EscapeForXmlDoc ( ) ) ) } ]\" />") ;
2232+ if ( hasOverloadResolutionPriority )
2233+ {
2234+ sb . Append ( "\t \t [global::System.Runtime.CompilerServices.OverloadResolutionPriority(" ) . Append ( valueFlags ? . Count ( x => ! x ) . ToString ( ) ?? "int.MaxValue" ) . Append ( ")]" ) . AppendLine ( ) ;
2235+ }
2236+
22322237 sb . Append ( "\t \t global::Mockolate.Setup.IndexerSetup<" ) . AppendTypeOrWrapper ( indexer . Type ) ;
22332238 foreach ( MethodParameter parameter in indexer . IndexerParameters ! )
22342239 {
@@ -2252,7 +2257,7 @@ private static void AppendIndexerSetupDefinition(StringBuilder sb, Property inde
22522257 else
22532258 {
22542259 sb . Append ( parameter . ToParameter ( ) ) ;
2255- if ( parameter . CanBeNullable ( ) )
2260+ if ( parameter . CanUseNullableParameterOverload ( ) )
22562261 {
22572262 sb . Append ( '?' ) ;
22582263 }
@@ -2294,7 +2299,7 @@ private static void AppendIndexerSetupImplementation(StringBuilder sb, Property
22942299 else
22952300 {
22962301 sb . Append ( parameter . ToParameter ( ) ) ;
2297- if ( parameter . CanBeNullable ( ) )
2302+ if ( parameter . CanUseNullableParameterOverload ( ) )
22982303 {
22992304 sb . Append ( '?' ) ;
23002305 }
@@ -2333,7 +2338,7 @@ private static void AppendIndexerSetupImplementation(StringBuilder sb, Property
23332338 else
23342339 {
23352340 sb . Append ( $ "new global::Mockolate.Parameters.NamedParameter(\" { parameter . Name } \" , (global::Mockolate.Parameters.IParameter)({ paramRef } ") ;
2336- if ( parameter . CanBeNullable ( ) )
2341+ if ( parameter . CanUseNullableParameterOverload ( ) )
23372342 {
23382343 sb . Append ( $ " ?? global::Mockolate.It.IsNull<{ parameter . ToNullableType ( ) } >(\" null\" )") ;
23392344 }
@@ -2352,10 +2357,15 @@ private static void AppendIndexerSetupImplementation(StringBuilder sb, Property
23522357 sb . AppendLine ( ) ;
23532358 }
23542359
2355- private static void AppendIndexerVerifyDefinition ( StringBuilder sb , Property indexer , string verifyName , bool [ ] ? valueFlags = null )
2360+ private static void AppendIndexerVerifyDefinition ( StringBuilder sb , Property indexer , string verifyName , bool [ ] ? valueFlags = null , bool hasOverloadResolutionPriority = false )
23562361 {
23572362 sb . AppendXmlSummary (
23582363 $ "Verify interactions with the { indexer . Type . Fullname . EscapeForXmlDoc ( ) } indexer <see cref=\" { indexer . ContainingType . EscapeForXmlDoc ( ) } .this[{ string . Join ( ", " , indexer . IndexerParameters ! . Value . Select ( p => p . RefKind . GetString ( ) + p . Type . Fullname . EscapeForXmlDoc ( ) ) ) } ]\" />.") ;
2364+ if ( hasOverloadResolutionPriority )
2365+ {
2366+ sb . Append ( "\t \t [global::System.Runtime.CompilerServices.OverloadResolutionPriority(" ) . Append ( valueFlags ? . Count ( x => ! x ) . ToString ( ) ?? "int.MaxValue" ) . Append ( ")]" ) . AppendLine ( ) ;
2367+ }
2368+
23592369 sb . Append ( "\t \t global::Mockolate.Verify.VerificationIndexerResult<" ) . Append ( verifyName ) . Append ( ", " ) . AppendTypeOrWrapper ( indexer . Type ) . Append ( "> this[" ) ;
23602370 int i = 0 ;
23612371 foreach ( MethodParameter parameter in indexer . IndexerParameters ! . Value )
@@ -2373,7 +2383,7 @@ private static void AppendIndexerVerifyDefinition(StringBuilder sb, Property ind
23732383 else
23742384 {
23752385 sb . Append ( parameter . ToParameter ( ) ) ;
2376- if ( parameter . CanBeNullable ( ) )
2386+ if ( parameter . CanUseNullableParameterOverload ( ) )
23772387 {
23782388 sb . Append ( '?' ) ;
23792389 }
@@ -2409,7 +2419,7 @@ private static void AppendIndexerVerifyImplementation(StringBuilder sb, Property
24092419 else
24102420 {
24112421 sb . Append ( parameter . ToParameter ( ) ) ;
2412- if ( parameter . CanBeNullable ( ) )
2422+ if ( parameter . CanUseNullableParameterOverload ( ) )
24132423 {
24142424 sb . Append ( '?' ) ;
24152425 }
@@ -2551,20 +2561,20 @@ private static void DefineVerifyInterface(StringBuilder sb, Class @class, string
25512561 indexer . MemberType == memberType ;
25522562 foreach ( Property indexer in @class . AllProperties ( ) . Where ( indexerPredicate ) )
25532563 {
2554- AppendIndexerVerifyDefinition ( sb , indexer , verifyName ) ;
2564+ AppendIndexerVerifyDefinition ( sb , indexer , verifyName , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
25552565 if ( indexer . IndexerParameters ! . Value . Count <= MaxExplicitParameters )
25562566 {
25572567 foreach ( bool [ ] valueFlags in GenerateValueFlagCombinations ( indexer . IndexerParameters . Value ) )
25582568 {
2559- AppendIndexerVerifyDefinition ( sb , indexer , verifyName , valueFlags ) ;
2569+ AppendIndexerVerifyDefinition ( sb , indexer , verifyName , valueFlags , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
25602570 }
25612571 }
25622572 else
25632573 {
2564- bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
2574+ bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
25652575 if ( allValueFlags . Any ( f => f ) )
25662576 {
2567- AppendIndexerVerifyDefinition ( sb , indexer , verifyName , allValueFlags ) ;
2577+ AppendIndexerVerifyDefinition ( sb , indexer , verifyName , allValueFlags , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
25682578 }
25692579 }
25702580 }
@@ -2606,7 +2616,7 @@ private static void DefineVerifyInterface(StringBuilder sb, Class @class, string
26062616 }
26072617 else
26082618 {
2609- bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
2619+ bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
26102620 if ( allValueFlags . Any ( f => f ) )
26112621 {
26122622 AppendMethodVerifyDefinition ( sb , method , verifyName , false , valueFlags : allValueFlags , hasOverloadResolutionPriority : hasOverloadResolutionPriority ) ;
@@ -2693,7 +2703,7 @@ private static void AppendMethodVerifyDefinition(StringBuilder sb, Method method
26932703 else
26942704 {
26952705 sb . AppendVerifyParameter ( parameter ) ;
2696- if ( parameter . CanBeNullable ( ) )
2706+ if ( parameter . CanUseNullableParameterOverload ( ) )
26972707 {
26982708 sb . Append ( '?' ) ;
26992709 }
@@ -2760,7 +2770,7 @@ private static void ImplementVerifyInterface(StringBuilder sb, Class @class, str
27602770 }
27612771 else
27622772 {
2763- bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
2773+ bool [ ] allValueFlags = indexer . IndexerParameters . Value . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
27642774 if ( allValueFlags . Any ( f => f ) )
27652775 {
27662776 AppendIndexerVerifyImplementation ( sb , indexer , mockRegistryName , verifyName , allValueFlags ) ;
@@ -2804,7 +2814,7 @@ private static void ImplementVerifyInterface(StringBuilder sb, Class @class, str
28042814 }
28052815 else
28062816 {
2807- bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanBeExplicitValue ( ) ) . ToArray ( ) ;
2817+ bool [ ] allValueFlags = method . Parameters . Select ( p => p . CanUseNullableParameterOverload ( ) ) . ToArray ( ) ;
28082818 if ( allValueFlags . Any ( f => f ) )
28092819 {
28102820 AppendMethodVerifyImplementation ( sb , method , mockRegistryName , verifyName , false , valueFlags : allValueFlags ) ;
@@ -2868,7 +2878,7 @@ private static void AppendMethodVerifyImplementation(StringBuilder sb, Method me
28682878 else
28692879 {
28702880 sb . AppendVerifyParameter ( parameter ) ;
2871- if ( parameter . CanBeNullable ( ) )
2881+ if ( parameter . CanUseNullableParameterOverload ( ) )
28722882 {
28732883 sb . Append ( '?' ) ;
28742884 }
0 commit comments