@@ -68,14 +68,13 @@ public static class OpenApiSchemaRules
6868
6969 if ( schema . Reference != null && schema . Discriminator != null )
7070 {
71- var discriminator = schema . Discriminator ? . PropertyName ;
72- var schemaReferenceId = schema . Reference . Id ;
71+ var discriminatorName = schema . Discriminator ? . PropertyName ;
7372
74- if ( ! ValidateChildSchemaAgainstDiscriminator ( schema , discriminator , schemaReferenceId , context ) )
73+ if ( ! ValidateChildSchemaAgainstDiscriminator ( schema , discriminatorName ) )
7574 {
7675 context . CreateError ( nameof ( ValidateSchemaDiscriminator ) ,
7776 string . Format ( SRResource . Validation_SchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator ,
78- schemaReferenceId , discriminator ) ) ;
77+ schema . Reference . Id , discriminatorName ) ) ;
7978 }
8079 }
8180
@@ -86,51 +85,52 @@ public static class OpenApiSchemaRules
8685 /// Validates the property name in the discriminator against the ones present in the children schema
8786 /// </summary>
8887 /// <param name="schema">The parent schema.</param>
89- /// <param name="discriminator ">Adds support for polymorphism. The discriminator is an object name that is used to differentiate
88+ /// <param name="discriminatorName ">Adds support for polymorphism. The discriminator is an object name that is used to differentiate
9089 /// between other schemas which may satisfy the payload description.</param>
91- /// <param name="schemaReferenceId"></param>
92- /// <param name="context">A validation context.</param>
93- public static bool ValidateChildSchemaAgainstDiscriminator ( OpenApiSchema schema , string discriminator , string schemaReferenceId , IValidationContext context )
90+ public static bool ValidateChildSchemaAgainstDiscriminator ( OpenApiSchema schema , string discriminatorName )
9491 {
9592 bool containsDiscriminator = false ;
9693
97- if ( ! schema . Required . Contains ( discriminator ) )
94+ if ( ! schema . Required ? . Contains ( discriminatorName ) ?? false )
9895 {
9996 // recursively check nested schema.OneOf, schema.AnyOf or schema.AllOf and their required fields for the discriminator
10097 if ( schema . OneOf . Count != 0 )
10198 {
102- return TraverseSchemaElements ( discriminator , schema . OneOf , schemaReferenceId , context , containsDiscriminator ) ;
99+ return TraverseSchemaElements ( discriminatorName , schema . OneOf , ref containsDiscriminator ) ;
103100 }
104101 if ( schema . AnyOf . Count != 0 )
105102 {
106- return TraverseSchemaElements ( discriminator , schema . AnyOf , schemaReferenceId , context , containsDiscriminator ) ;
103+ return TraverseSchemaElements ( discriminatorName , schema . AnyOf , ref containsDiscriminator ) ;
107104 }
108105 if ( schema . AllOf . Count != 0 )
109106 {
110- return TraverseSchemaElements ( discriminator , schema . AllOf , schemaReferenceId , context , containsDiscriminator ) ;
107+ return TraverseSchemaElements ( discriminatorName , schema . AllOf , ref containsDiscriminator ) ;
111108 }
112109 }
110+ else
111+ {
112+ return true ;
113+ }
113114
114115 return containsDiscriminator ;
115116 }
116117
117118 /// <summary>
118119 /// Traverses the schema elements and checks whether the schema contains the discriminator.
119120 /// </summary>
120- /// <param name="discriminator ">Adds support for polymorphism. The discriminator is an object name that is used to differentiate
121+ /// <param name="discriminatorName ">Adds support for polymorphism. The discriminator is an object name that is used to differentiate
121122 /// between other schemas which may satisfy the payload description.</param>
122123 /// <param name="childSchema">The child schema.</param>
123- /// <param name="schemaReferenceId"> The schema reference Id.</param>
124- /// <param name="context"> A validation context.</param>
125124 /// <param name="containsDiscriminator">Tracks whether the discriminator is present.</param>
126125 /// <returns></returns>
127- public static bool TraverseSchemaElements ( string discriminator , IList < OpenApiSchema > childSchema , string schemaReferenceId , IValidationContext context , bool containsDiscriminator )
126+ public static bool TraverseSchemaElements ( string discriminatorName , IList < OpenApiSchema > childSchema , ref bool containsDiscriminator )
128127 {
129128 foreach ( var childItem in childSchema )
130129 {
131- if ( ! childItem . Properties . ContainsKey ( discriminator ) && ! childItem . Required . Contains ( discriminator ) )
130+ if ( ( ! childItem . Properties ? . ContainsKey ( discriminatorName ) ?? false ) &&
131+ ( ! childItem . Required ? . Contains ( discriminatorName ) ?? false ) )
132132 {
133- return ValidateChildSchemaAgainstDiscriminator ( childItem , discriminator , schemaReferenceId , context ) ;
133+ return ValidateChildSchemaAgainstDiscriminator ( childItem , discriminatorName ) ;
134134 }
135135 else
136136 {
0 commit comments