@@ -102,7 +102,7 @@ private void EmitContextClass(ModelReaderWriterContextGenerationSpec contextGene
102
102
indent ++ ;
103
103
foreach ( var modelInfo in contextGenerationSpec . TypeBuilders )
104
104
{
105
- WrapInSuppress ( modelInfo . Type . ObsoleteLevel , builder , ( ) =>
105
+ WrapInSuppress ( modelInfo . Type , builder , ( ) =>
106
106
{
107
107
builder . Append ( indent , $ "_typeBuilderFactories.Add(typeof({ modelInfo . Type . FullyQualifiedName } ), () => ") ;
108
108
if ( ShouldGenerateAsLocal ( contextGenerationSpec , modelInfo ) )
@@ -315,7 +315,7 @@ private static void EmitReadOnlyMemoryBuilder(
315
315
{
316
316
var elementType = modelInfo . Type . ItemType ! ;
317
317
318
- WrapInSuppress ( elementType . ObsoleteLevel , builder , ( ) =>
318
+ WrapInSuppress ( elementType , builder , ( ) =>
319
319
{
320
320
builder . Append ( indent , "protected override " ) ;
321
321
builder . AppendType ( typeof ( Type ) ) ;
@@ -377,7 +377,7 @@ private static void EmitMultiDimensionalArrayBuilder(
377
377
{
378
378
var elementType = modelInfo . Type . ItemType ! ;
379
379
380
- WrapInSuppress ( elementType . ObsoleteLevel , builder , ( ) =>
380
+ WrapInSuppress ( elementType , builder , ( ) =>
381
381
{
382
382
builder . Append ( indent , "protected override " ) ;
383
383
builder . AppendType ( typeof ( Type ) ) ;
@@ -441,7 +441,7 @@ private static void EmitArrayBuilder(
441
441
TypeBuilderSpec modelInfo )
442
442
{
443
443
var elementType = modelInfo . Type . ItemType ! ;
444
- WrapInSuppress ( elementType . ObsoleteLevel , builder , ( ) =>
444
+ WrapInSuppress ( elementType , builder , ( ) =>
445
445
{
446
446
builder . Append ( indent , "protected override " ) ;
447
447
builder . AppendType ( typeof ( Type ) ) ;
@@ -484,7 +484,7 @@ private static void EmitDictionaryBuilder(
484
484
{
485
485
var elementType = modelInfo . Type . ItemType ! ;
486
486
487
- WrapInSuppress ( elementType . ObsoleteLevel , builder , ( ) =>
487
+ WrapInSuppress ( elementType , builder , ( ) =>
488
488
{
489
489
builder . Append ( indent , "protected override " ) ;
490
490
builder . AppendType ( typeof ( Type ) ) ;
@@ -513,7 +513,7 @@ private static void EmitListBuilder(
513
513
{
514
514
var elementType = modelInfo . Type . ItemType ! ;
515
515
516
- WrapInSuppress ( elementType . ObsoleteLevel , builder , ( ) =>
516
+ WrapInSuppress ( elementType , builder , ( ) =>
517
517
{
518
518
builder . Append ( indent , "protected override " ) ;
519
519
builder . AppendType ( typeof ( Type ) ) ;
@@ -541,7 +541,7 @@ private static void EmitPersistableModelBuilder(
541
541
TypeBuilderSpec modelInfo ,
542
542
TypeRef context )
543
543
{
544
- WrapInSuppress ( modelInfo . Type . ObsoleteLevel , builder , ( ) => {
544
+ WrapInSuppress ( modelInfo . Type , builder , ( ) => {
545
545
builder . Append ( indent , "protected override " ) ;
546
546
builder . AppendType ( typeof ( Type ) ) ;
547
547
builder . AppendLine ( $ " BuilderType => typeof({ modelInfo . Type . FullyQualifiedName } );") ;
@@ -550,31 +550,42 @@ private static void EmitPersistableModelBuilder(
550
550
551
551
if ( modelInfo . PersistableModelProxy is not null )
552
552
{
553
- WrapInSuppress ( modelInfo . PersistableModelProxy . ObsoleteLevel , builder , ( ) =>
553
+ WrapInSuppress ( modelInfo . PersistableModelProxy , builder , ( ) =>
554
554
builder . AppendLine ( indent , $ "protected override object CreateInstance() => new { modelInfo . PersistableModelProxy . FullyQualifiedName } ();") ) ;
555
555
}
556
556
else
557
557
{
558
- WrapInSuppress ( modelInfo . Type . ObsoleteLevel , builder , ( ) =>
558
+ WrapInSuppress ( modelInfo . Type , builder , ( ) =>
559
559
builder . AppendLine ( indent , $ "protected override object CreateInstance() => new { modelInfo . Type . FullyQualifiedName } ();") ) ;
560
560
}
561
561
}
562
562
563
563
/// <summary>
564
564
/// Helper method to wrap the action in #pragma warning disable CS0618 and #pragma warning restore CS0618.
565
- /// This is needed if MRW is used with a type that is marked as Obsolete, but not marked as an error.
565
+ /// This is needed if MRW is used with a type that is marked as Obsolete, but not marked as an error. It is also
566
+ /// used for types that have an experimental diagnostic ID.
566
567
/// </summary>
567
- private static void WrapInSuppress ( ObsoleteLevel level , StringBuilder builder , Action action )
568
+ private static void WrapInSuppress ( TypeRef typeRef , StringBuilder builder , Action action )
568
569
{
569
- if ( level = = ObsoleteLevel . None )
570
+ if ( typeRef . ObsoleteLevel ! = ObsoleteLevel . None )
570
571
{
571
- action ( ) ;
572
- return ;
572
+ builder . AppendLine ( "#pragma warning disable CS0618" ) ;
573
+ }
574
+ if ( typeRef . ExperimentalDiagnosticId != null )
575
+ {
576
+ builder . AppendLine ( $ "#pragma warning disable { typeRef . ExperimentalDiagnosticId } ") ;
573
577
}
574
578
575
- builder . AppendLine ( "#pragma warning disable CS0618" ) ;
576
579
action ( ) ;
577
- builder . AppendLine ( "#pragma warning restore CS0618" ) ;
580
+
581
+ if ( typeRef . ExperimentalDiagnosticId != null )
582
+ {
583
+ builder . AppendLine ( $ "#pragma warning restore { typeRef . ExperimentalDiagnosticId } ") ;
584
+ }
585
+ if ( typeRef . ObsoleteLevel != ObsoleteLevel . None )
586
+ {
587
+ builder . AppendLine ( "#pragma warning restore CS0618" ) ;
588
+ }
578
589
}
579
590
580
591
private HashSet < string > GetNameSpaces ( ModelReaderWriterContextGenerationSpec contextGenerationSpec )
0 commit comments