@@ -225,8 +225,13 @@ private static SourceText GenerateForTypeWithBuiltInConverter(ContextGenerationS
225
225
226
226
string typeFQN = typeMetadata . TypeRef . FullyQualifiedName ;
227
227
string typeInfoPropertyName = typeMetadata . TypeInfoPropertyName ;
228
- string metadataInitSource = $ "{ JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , { JsonMetadataServicesTypeRef } .{ typeInfoPropertyName } Converter);";
229
- GenerateTypeInfoProperty ( writer , typeMetadata , metadataInitSource ) ;
228
+
229
+ GenerateTypeInfoFactoryHeader ( writer , typeMetadata ) ;
230
+ writer . WriteLine ( $ """
231
+ { JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , { JsonMetadataServicesTypeRef } .{ typeInfoPropertyName } Converter);
232
+ """ ) ;
233
+
234
+ GenerateTypeInfoFactoryFooter ( writer ) ;
230
235
231
236
return CompleteSourceFileAndReturnText ( writer ) ;
232
237
}
@@ -238,12 +243,16 @@ private static SourceText GenerateForTypeWithCustomConverter(ContextGenerationSp
238
243
SourceWriter writer = CreateSourceWriterWithContextHeader ( contextSpec ) ;
239
244
240
245
string typeFQN = typeMetadata . TypeRef . FullyQualifiedName ;
241
- string metadataInitSource = $$ """
242
- {{ JsonConverterTypeRef }} converter = {{ ExpandConverterMethodName }} (typeof({{ typeFQN }} ), new {{ typeMetadata . ConverterType . FullyQualifiedName }} (), {{ OptionsLocalVariableName }} );
243
- {{ JsonTypeInfoReturnValueLocalVariableName }} = {{ JsonMetadataServicesTypeRef }} .{{ GetCreateValueInfoMethodRef ( typeFQN ) }} ({{ OptionsLocalVariableName }} , converter);
244
- """ ;
246
+ string converterFQN = typeMetadata . ConverterType . FullyQualifiedName ;
247
+
248
+ GenerateTypeInfoFactoryHeader ( writer , typeMetadata ) ;
245
249
246
- GenerateTypeInfoProperty ( writer , typeMetadata , metadataInitSource ) ;
250
+ writer . WriteLine ( $ """
251
+ { JsonConverterTypeRef } converter = { ExpandConverterMethodName } (typeof({ typeFQN } ), new { converterFQN } (), { OptionsLocalVariableName } );
252
+ { JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , converter);
253
+ """ ) ;
254
+
255
+ GenerateTypeInfoFactoryFooter ( writer ) ;
247
256
248
257
return CompleteSourceFileAndReturnText ( writer ) ;
249
258
}
@@ -257,13 +266,14 @@ private static SourceText GenerateForNullable(ContextGenerationSpec contextSpec,
257
266
string typeFQN = typeMetadata . TypeRef . FullyQualifiedName ;
258
267
string underlyingTypeFQN = typeMetadata . NullableUnderlyingType . FullyQualifiedName ;
259
268
260
- string metadataInitSource = $$ """
261
- {{ JsonTypeInfoReturnValueLocalVariableName }} = {{ JsonMetadataServicesTypeRef }} .{{ GetCreateValueInfoMethodRef ( typeFQN ) }} (
262
- {{ OptionsLocalVariableName }} ,
263
- {{ JsonMetadataServicesTypeRef }} .GetNullableConverter<{{ underlyingTypeFQN }} >({{ OptionsLocalVariableName }} ));
264
- """ ;
269
+ GenerateTypeInfoFactoryHeader ( writer , typeMetadata ) ;
270
+
271
+ writer . WriteLine ( $$ """
272
+ {{ JsonConverterTypeRef }} converter = {{ JsonMetadataServicesTypeRef }} .GetNullableConverter<{{ underlyingTypeFQN }} >({{ OptionsLocalVariableName }} );
273
+ {{ JsonTypeInfoReturnValueLocalVariableName }} = {{ JsonMetadataServicesTypeRef }} .{{ GetCreateValueInfoMethodRef ( typeFQN ) }} ({{ OptionsLocalVariableName }} , converter);
274
+ """ ) ;
265
275
266
- GenerateTypeInfoProperty ( writer , typeMetadata , metadataInitSource ) ;
276
+ GenerateTypeInfoFactoryFooter ( writer ) ;
267
277
268
278
return CompleteSourceFileAndReturnText ( writer ) ;
269
279
}
@@ -273,9 +283,13 @@ private static SourceText GenerateForUnsupportedType(ContextGenerationSpec conte
273
283
SourceWriter writer = CreateSourceWriterWithContextHeader ( contextSpec ) ;
274
284
275
285
string typeFQN = typeMetadata . TypeRef . FullyQualifiedName ;
276
- string metadataInitSource = $ "{ JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , { JsonMetadataServicesTypeRef } .GetUnsupportedTypeConverter<{ typeFQN } >());";
277
286
278
- GenerateTypeInfoProperty ( writer , typeMetadata , metadataInitSource ) ;
287
+ GenerateTypeInfoFactoryHeader ( writer , typeMetadata ) ;
288
+ writer . WriteLine ( $ """
289
+ { JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , { JsonMetadataServicesTypeRef } .GetUnsupportedTypeConverter<{ typeFQN } >());
290
+ """ ) ;
291
+
292
+ GenerateTypeInfoFactoryFooter ( writer ) ;
279
293
280
294
return CompleteSourceFileAndReturnText ( writer ) ;
281
295
}
@@ -285,8 +299,13 @@ private static SourceText GenerateForEnum(ContextGenerationSpec contextSpec, Typ
285
299
SourceWriter writer = CreateSourceWriterWithContextHeader ( contextSpec ) ;
286
300
287
301
string typeFQN = typeMetadata . TypeRef . FullyQualifiedName ;
288
- string metadataInitSource = $ "{ JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , { JsonMetadataServicesTypeRef } .GetEnumConverter<{ typeFQN } >({ OptionsLocalVariableName } ));";
289
- GenerateTypeInfoProperty ( writer , typeMetadata , metadataInitSource ) ;
302
+
303
+ GenerateTypeInfoFactoryHeader ( writer , typeMetadata ) ;
304
+ writer . WriteLine ( $ """
305
+ { JsonTypeInfoReturnValueLocalVariableName } = { JsonMetadataServicesTypeRef } .{ GetCreateValueInfoMethodRef ( typeFQN ) } ({ OptionsLocalVariableName } , { JsonMetadataServicesTypeRef } .GetEnumConverter<{ typeFQN } >({ OptionsLocalVariableName } ));
306
+ """ ) ;
307
+
308
+ GenerateTypeInfoFactoryFooter ( writer ) ;
290
309
291
310
return CompleteSourceFileAndReturnText ( writer ) ;
292
311
}
@@ -349,18 +368,20 @@ private SourceText GenerateForCollection(ContextGenerationSpec contextSpec, Type
349
368
break ;
350
369
}
351
370
352
- string metadataInitSource = $$ """
353
- var {{ InfoVarName }} = new {{ JsonCollectionInfoValuesTypeRef }} <{{ typeFQN }} >()
371
+ GenerateTypeInfoFactoryHeader ( writer , typeGenerationSpec ) ;
372
+
373
+ writer . WriteLine ( $$ """
374
+ var {{ InfoVarName }} = new {{ JsonCollectionInfoValuesTypeRef }} <{{ typeFQN }} >
354
375
{
355
376
{{ ObjectCreatorPropName }} = {{ FormatDefaultConstructorExpr ( typeGenerationSpec ) }} ,
356
377
{{ NumberHandlingPropName }} = {{ GetNumberHandlingAsStr ( typeGenerationSpec . NumberHandling ) }} ,
357
378
{{ SerializeHandlerPropName }} = {{ serializeMethodName ?? "null" }}
358
379
};
359
380
360
381
{{ JsonTypeInfoReturnValueLocalVariableName }} = {{ JsonMetadataServicesTypeRef }} .{{ createCollectionMethodExpr }} ;
361
- """ ;
382
+ """ ) ;
362
383
363
- GenerateTypeInfoProperty ( writer , typeGenerationSpec , metadataInitSource ) ;
384
+ GenerateTypeInfoFactoryFooter ( writer ) ;
364
385
365
386
if ( serializeMethodName != null )
366
387
{
@@ -491,8 +512,10 @@ private SourceText GenerateForObject(ContextGenerationSpec contextSpec, TypeGene
491
512
const string ObjectInfoVarName = "objectInfo" ;
492
513
string genericArg = typeMetadata . TypeRef . FullyQualifiedName ;
493
514
494
- string metadataInitSource = $$ """
495
- var {{ ObjectInfoVarName }} = new {{ JsonObjectInfoValuesTypeRef }} <{{ genericArg }} >()
515
+ GenerateTypeInfoFactoryHeader ( writer , typeMetadata ) ;
516
+
517
+ writer . WriteLine ( $$ """
518
+ var {{ ObjectInfoVarName }} = new {{ JsonObjectInfoValuesTypeRef }} <{{ genericArg }} >
496
519
{
497
520
{{ ObjectCreatorPropName }} = {{ creatorInvocation }} ,
498
521
ObjectWithParameterizedConstructorCreator = {{ parameterizedCreatorInvocation }} ,
@@ -503,25 +526,24 @@ private SourceText GenerateForObject(ContextGenerationSpec contextSpec, TypeGene
503
526
};
504
527
505
528
{{ JsonTypeInfoReturnValueLocalVariableName }} = {{ JsonMetadataServicesTypeRef }} .CreateObjectInfo<{{ typeMetadata . TypeRef . FullyQualifiedName }} >({{ OptionsLocalVariableName }} , {{ ObjectInfoVarName }} );
506
- """ ;
529
+ """ ) ;
507
530
508
- if ( typeMetadata . UnmappedMemberHandling != null )
531
+ if ( typeMetadata is { UnmappedMemberHandling : not null } or { PreferredPropertyObjectCreationHandling : not null } )
509
532
{
510
- metadataInitSource += $ """
511
-
512
- { JsonTypeInfoReturnValueLocalVariableName } .{ UnmappedMemberHandlingPropName } = { GetUnmappedMemberHandlingAsStr ( typeMetadata . UnmappedMemberHandling . Value ) } ;
513
- """ ;
514
- }
533
+ writer . WriteLine ( ) ;
515
534
516
- if ( typeMetadata . PreferredPropertyObjectCreationHandling != null )
517
- {
518
- metadataInitSource += $ """
535
+ if ( typeMetadata . UnmappedMemberHandling != null )
536
+ {
537
+ writer . WriteLine ( $ "{ JsonTypeInfoReturnValueLocalVariableName } .{ UnmappedMemberHandlingPropName } = { GetUnmappedMemberHandlingAsStr ( typeMetadata . UnmappedMemberHandling . Value ) } ;") ;
538
+ }
519
539
520
- { JsonTypeInfoReturnValueLocalVariableName } .{ PreferredPropertyObjectCreationHandlingPropName } = { GetObjectCreationHandlingAsStr ( typeMetadata . PreferredPropertyObjectCreationHandling . Value ) } ;
521
- """ ;
540
+ if ( typeMetadata . PreferredPropertyObjectCreationHandling != null )
541
+ {
542
+ writer . WriteLine ( $ "{ JsonTypeInfoReturnValueLocalVariableName } .{ PreferredPropertyObjectCreationHandlingPropName } = { GetObjectCreationHandlingAsStr ( typeMetadata . PreferredPropertyObjectCreationHandling . Value ) } ;") ;
543
+ }
522
544
}
523
545
524
- GenerateTypeInfoProperty ( writer , typeMetadata , metadataInitSource ) ;
546
+ GenerateTypeInfoFactoryFooter ( writer ) ;
525
547
526
548
if ( propInitMethodName != null )
527
549
{
@@ -596,15 +618,17 @@ private void GeneratePropMetadataInitFunc(SourceWriter writer, string propInitMe
596
618
string ? converterInstantiationExpr = null ;
597
619
if ( property . ConverterType != null )
598
620
{
621
+ string converterFQN = property . ConverterType . FullyQualifiedName ;
599
622
TypeRef ? nullableUnderlyingType = _typeIndex [ property . PropertyType ] . NullableUnderlyingType ;
600
623
_emitGetConverterForNullablePropertyMethod |= nullableUnderlyingType != null ;
624
+
601
625
converterInstantiationExpr = nullableUnderlyingType != null
602
- ? $ "{ GetConverterForNullablePropertyMethodName } <{ nullableUnderlyingType . FullyQualifiedName } >(new { property . ConverterType . FullyQualifiedName } (), { OptionsLocalVariableName } )"
603
- : $ "({ JsonConverterTypeRef } <{ propertyTypeFQN } >){ ExpandConverterMethodName } (typeof({ propertyTypeFQN } ), new { property . ConverterType . FullyQualifiedName } (), { OptionsLocalVariableName } )";
626
+ ? $ "{ GetConverterForNullablePropertyMethodName } <{ nullableUnderlyingType . FullyQualifiedName } >(new { converterFQN } (), { OptionsLocalVariableName } )"
627
+ : $ "({ JsonConverterTypeRef } <{ propertyTypeFQN } >){ ExpandConverterMethodName } (typeof({ propertyTypeFQN } ), new { converterFQN } (), { OptionsLocalVariableName } )";
604
628
}
605
629
606
630
writer . WriteLine ( $$ """
607
- var {{ InfoVarName }} {{ i }} = new {{ JsonPropertyInfoValuesTypeRef }} <{{ propertyTypeFQN }} >()
631
+ var {{ InfoVarName }} {{ i }} = new {{ JsonPropertyInfoValuesTypeRef }} <{{ propertyTypeFQN }} >
608
632
{
609
633
IsProperty = {{ FormatBool ( property . IsProperty ) }} ,
610
634
IsPublic = {{ FormatBool ( property . IsPublic ) }} ,
@@ -986,7 +1010,7 @@ private static DefaultCheckType GetDefaultCheckType(ContextGenerationSpec contex
986
1010
} ;
987
1011
}
988
1012
989
- private static void GenerateTypeInfoProperty ( SourceWriter writer , TypeGenerationSpec typeMetadata , string metadataInitSource )
1013
+ private static void GenerateTypeInfoFactoryHeader ( SourceWriter writer , TypeGenerationSpec typeMetadata )
990
1014
{
991
1015
string typeFQN = typeMetadata . TypeRef . FullyQualifiedName ;
992
1016
string typeInfoPropertyName = typeMetadata . TypeInfoPropertyName ;
@@ -1010,15 +1034,18 @@ private static void GenerateTypeInfoProperty(SourceWriter writer, TypeGeneration
1010
1034
""" ) ;
1011
1035
1012
1036
writer . Indentation += 2 ;
1013
- writer . WriteLine ( metadataInitSource ) ;
1037
+ }
1038
+
1039
+ private static void GenerateTypeInfoFactoryFooter ( SourceWriter writer )
1040
+ {
1014
1041
writer . Indentation -= 2 ;
1015
1042
1016
1043
// NB OriginatingResolver should be the last property set by the source generator.
1017
1044
writer . WriteLine ( $$ """
1018
1045
}
1019
1046
1020
1047
{{ JsonTypeInfoReturnValueLocalVariableName }} .{{ OriginatingResolverPropertyName }} = this;
1021
- return jsonTypeInfo ;
1048
+ return {{ JsonTypeInfoReturnValueLocalVariableName }} ;
1022
1049
}
1023
1050
""" ) ;
1024
1051
}
0 commit comments