@@ -48,6 +48,21 @@ public virtual void WriteBeginClass(IOutputTypeInfo type)
4848 Writer . IncreaseIndent ( ) ;
4949 }
5050
51+ /// <summary>
52+ /// Builds the C# expression that yields the receiver for an instance resolver call.
53+ /// </summary>
54+ /// <param name="fullyQualifiedTypeName">
55+ /// The fully qualified type name of the resolver class (already prefixed with <c>global::</c>).
56+ /// </param>
57+ /// <param name="contextExpression">
58+ /// The C# expression that yields the resolver context (e.g. <c>"context"</c> for
59+ /// single resolvers, <c>"contexts[0]"</c> for batch resolvers).
60+ /// </param>
61+ protected virtual string GetInstanceReceiver (
62+ string fullyQualifiedTypeName ,
63+ string contextExpression = "context" )
64+ => $ "{ contextExpression } .Parent<{ fullyQualifiedTypeName } >()";
65+
5166 public void WriteEndClass ( )
5267 {
5368 Writer . DecreaseIndent ( ) ;
@@ -920,13 +935,14 @@ private void WriteResolver(
920935 {
921936 WriteResolverArguments( resolver , resolverMethod , typeLookup ) ;
922937
938+ var typeName = resolver. Member . ContainingType . ToFullyQualified ( ) ;
939+ var receiver = resolver. IsStatic ? typeName : GetInstanceReceiver ( typeName ) ;
940+
923941 if ( async)
924942 {
925943 Writer . WriteIndentedLine (
926- resolver . IsStatic
927- ? "var result = await {0}.{1}({2});"
928- : "var result = await context.Parent<{0}>().{1}({2});" ,
929- resolver . Member . ContainingType . ToFullyQualified ( ) ,
944+ "var result = await {0}.{1}({2});" ,
945+ receiver ,
930946 resolver . Member . Name ,
931947 GetResolverArgumentAssignments ( resolver . Parameters . Length ) ) ;
932948
@@ -935,10 +951,8 @@ private void WriteResolver(
935951 else
936952 {
937953 Writer. WriteIndentedLine (
938- resolver . IsStatic
939- ? "var result = {0}.{1}({2});"
940- : "var result = context.Parent<{0}>().{1}({2});" ,
941- resolver . Member . ContainingType . ToFullyQualified ( ) ,
954+ "var result = {0}.{1}({2});" ,
955+ receiver ,
942956 resolver . Member . Name ,
943957 GetResolverArgumentAssignments ( resolver . Parameters . Length ) ) ;
944958
@@ -1022,11 +1036,12 @@ private void WritePureResolver(Resolver resolver, IMethodSymbol resolverMethod,
10221036 {
10231037 WriteResolverArguments( resolver , resolverMethod , typeLookup ) ;
10241038
1039+ var typeName = resolver. Member . ContainingType . ToFullyQualified ( ) ;
1040+ var receiver = resolver. IsStatic ? typeName : GetInstanceReceiver ( typeName ) ;
1041+
10251042 Writer. WriteIndentedLine (
1026- resolver . IsStatic
1027- ? "var result = {0}.{1}({2});"
1028- : "var result = context.Parent<{0}>().{1}({2});" ,
1029- resolver . Member . ContainingType . ToFullyQualified ( ) ,
1043+ "var result = {0}.{1}({2});" ,
1044+ receiver ,
10301045 resolver . Member . Name ,
10311046 GetResolverArgumentAssignments ( resolver . Parameters . Length ) ) ;
10321047
@@ -1253,12 +1268,17 @@ or ResolverParameterKind.Argument
12531268
12541269 Writer . WriteLine ( ) ;
12551270
1256- // Call the user's batch resolver method
1271+ // Call the user's batch resolver method.
1272+ var batchTypeName = resolver . Member . ContainingType . ToFullyQualified ( ) ;
1273+ var batchReceiver = resolver . IsStatic
1274+ ? batchTypeName
1275+ : GetInstanceReceiver ( batchTypeName , "contexts[0]" ) ;
1276+
12571277 if ( isAsync )
12581278 {
12591279 Writer . WriteIndentedLine (
12601280 "var result = await {0}.{1}({2});" ,
1261- resolver . Member . ContainingType . ToFullyQualified ( ) ,
1281+ batchReceiver ,
12621282 resolver . Member . Name ,
12631283 GetResolverArgumentAssignments ( resolver . Parameters . Length ) ) ;
12641284
@@ -1283,7 +1303,7 @@ or ResolverParameterKind.Argument
12831303 {
12841304 Writer . WriteIndentedLine (
12851305 "var result = {0}.{1}({2});" ,
1286- resolver . Member . ContainingType . ToFullyQualified ( ) ,
1306+ batchReceiver ,
12871307 resolver . Member . Name ,
12881308 GetResolverArgumentAssignments ( resolver . Parameters . Length ) ) ;
12891309
@@ -1347,11 +1367,12 @@ private void WritePropertyResolver(Resolver resolver)
13471367 Writer . WriteIndentedLine ( "{" ) ;
13481368 using ( Writer . IncreaseIndent ( ) )
13491369 {
1370+ var typeName = resolver . Member . ContainingType . ToFullyQualified ( ) ;
1371+ var receiver = resolver . IsStatic ? typeName : GetInstanceReceiver ( typeName ) ;
1372+
13501373 Writer . WriteIndentedLine (
1351- resolver . IsStatic
1352- ? "var result = {0}.{1};"
1353- : "var result = context.Parent<{0}>().{1};" ,
1354- resolver . Member . ContainingType . ToFullyQualified ( ) ,
1374+ "var result = {0}.{1};" ,
1375+ receiver ,
13551376 resolver . Member . Name ) ;
13561377
13571378 Writer . WriteIndentedLine ( "return result;" ) ;
0 commit comments