@@ -14,28 +14,68 @@ namespace Microsoft.OpenApi.Models.References
14
14
/// </summary>
15
15
public class OpenApiSchemaReference : OpenApiSchema
16
16
{
17
- internal OpenApiSchema _target ;
17
+ #nullable enable
18
+ private OpenApiSchema ? _target ;
18
19
private readonly OpenApiReference _reference ;
19
- private string _description ;
20
- private JsonNode _default ;
21
- private JsonNode _example ;
22
- private IList < JsonNode > _examples ;
20
+ private string ? _description ;
21
+ private JsonNode ? _default ;
22
+ private JsonNode ? _example ;
23
+ private IList < JsonNode > ? _examples ;
24
+ private bool ? _nullable ;
25
+ private IDictionary < string , OpenApiSchema > ? _properties ;
26
+ private string ? _title ;
27
+ private string ? _schema ;
28
+ private string ? _comment ;
29
+ private string ? _id ;
30
+ private string ? _dynamicRef ;
31
+ private string ? _dynamicAnchor ;
32
+ private IDictionary < string , bool > ? _vocabulary ;
33
+ private IDictionary < string , OpenApiSchema > ? _definitions ;
34
+ private decimal ? _v31ExclusiveMaximum ;
35
+ private decimal ? _v31ExclusiveMinimum ;
36
+ private bool ? _unEvaluatedProperties ;
37
+ private JsonSchemaType ? _type ;
38
+ private string ? _const ;
39
+ private string ? _format ;
40
+ private decimal ? _maximum ;
41
+ private bool ? _exclusiveMaximum ;
42
+ private decimal ? _minimum ;
43
+ private bool ? _exclusiveMinimum ;
44
+ private int ? _maxLength ;
45
+ private int ? _minLength ;
46
+ private string ? _pattern ;
47
+ private decimal ? _multipleOf ;
48
+ private bool ? _readOnly ;
49
+ private bool ? _writeOnly ;
50
+ private IList < OpenApiSchema > ? _allOf ;
51
+ private IList < OpenApiSchema > ? _oneOf ;
52
+ private IList < OpenApiSchema > ? _anyOf ;
53
+ private OpenApiSchema ? _not ;
54
+ private ISet < string > ? _required ;
55
+ private OpenApiSchema _items ;
56
+ private int ? _maxItems ;
57
+ private int ? _minItems ;
58
+ private bool ? _uniqueItems ;
59
+ private IDictionary < string , OpenApiSchema > ? _patternProperties ;
60
+ private int ? _maxProperties ;
61
+ private int ? _minProperties ;
62
+ private bool ? _additionalPropertiesAllowed ;
63
+ private OpenApiSchema ? _additionalProperties ;
64
+ private OpenApiDiscriminator ? _discriminator ;
65
+ private OpenApiExternalDocs ? _externalDocs ;
66
+ private bool ? _deprecated ;
67
+ private OpenApiXml ? _xml ;
68
+ private IDictionary < string , IOpenApiExtension > ? _extensions ;
69
+ private bool ? _unevaluatedProperties ;
70
+ private IList < JsonNode > ? _enum ;
23
71
24
- #nullable enable
25
- private OpenApiSchema ? _targetProxy ;
72
+ private OpenApiSchema ? Target
26
73
#nullable restore
27
-
28
- private OpenApiSchema Target
29
74
{
30
75
get
31
76
{
32
77
_target ??= Reference . HostDocument ? . ResolveReferenceTo < OpenApiSchema > ( _reference ) ;
33
- if ( _targetProxy is null )
34
- {
35
- _targetProxy = new OpenApiSchema ( _target ) ;
36
- if ( ! string . IsNullOrEmpty ( _description ) ) _targetProxy . Description = _description ;
37
- }
38
- return _targetProxy ;
78
+ return _target ;
39
79
}
40
80
}
41
81
@@ -76,123 +116,123 @@ internal OpenApiSchemaReference(OpenApiSchema target, string referenceId)
76
116
}
77
117
78
118
/// <inheritdoc/>
79
- public override string Title { get => Target . Title ; set => Target . Title = value ; }
119
+ public override string Title { get => string . IsNullOrEmpty ( _title ) ? Target . Title : _title ; set => _title = value ; }
80
120
/// <inheritdoc/>
81
- public override string Schema { get => Target . Schema ; set => Target . Schema = value ; }
121
+ public override string Schema { get => string . IsNullOrEmpty ( _schema ) ? Target . Schema : _schema ; set => _schema = value ; }
82
122
/// <inheritdoc/>
83
- public override string Id { get => Target . Id ; set => Target . Id = value ; }
123
+ public override string Id { get => string . IsNullOrEmpty ( _id ) ? Target . Id : _id ; set => _id = value ; }
84
124
/// <inheritdoc/>
85
- public override string Comment { get => Target . Comment ; set => Target . Comment = value ; }
125
+ public override string Comment { get => string . IsNullOrEmpty ( _comment ) ? Target . Comment : _comment ; set => _comment = value ; }
86
126
/// <inheritdoc/>
87
- public override IDictionary < string , bool > Vocabulary { get => Target . Vocabulary ; set => Target . Vocabulary = value ; }
127
+ public override IDictionary < string , bool > Vocabulary { get => _vocabulary is not null ? _vocabulary : Target . Vocabulary ; set => _vocabulary = value ; }
88
128
/// <inheritdoc/>
89
- public override string DynamicRef { get => Target . DynamicRef ; set => Target . DynamicRef = value ; }
129
+ public override string DynamicRef { get => string . IsNullOrEmpty ( _dynamicRef ) ? Target . DynamicRef : _dynamicRef ; set => _dynamicRef = value ; }
90
130
/// <inheritdoc/>
91
- public override string DynamicAnchor { get => Target . DynamicAnchor ; set => Target . DynamicAnchor = value ; }
131
+ public override string DynamicAnchor { get => string . IsNullOrEmpty ( _dynamicAnchor ) ? Target . DynamicAnchor : _dynamicAnchor ; set => _dynamicAnchor = value ; }
92
132
/// <inheritdoc/>
93
- public override IDictionary < string , OpenApiSchema > Definitions { get => Target . Definitions ; set => Target . Definitions = value ; }
133
+ public override IDictionary < string , OpenApiSchema > Definitions { get => _definitions is not null ? _definitions : Target . Definitions ; set => _definitions = value ; }
94
134
/// <inheritdoc/>
95
- public override decimal ? V31ExclusiveMaximum { get => Target . V31ExclusiveMaximum ; set => Target . V31ExclusiveMaximum = value ; }
135
+ public override decimal ? V31ExclusiveMaximum { get => _v31ExclusiveMaximum is not null ? _v31ExclusiveMaximum . Value : Target . V31ExclusiveMaximum ; set => _v31ExclusiveMaximum = value ; }
96
136
/// <inheritdoc/>
97
- public override decimal ? V31ExclusiveMinimum { get => Target . V31ExclusiveMinimum ; set => Target . V31ExclusiveMinimum = value ; }
137
+ public override decimal ? V31ExclusiveMinimum { get => _v31ExclusiveMinimum is not null ? _v31ExclusiveMinimum . Value : Target . V31ExclusiveMinimum ; set => _v31ExclusiveMinimum = value ; }
98
138
/// <inheritdoc/>
99
- public override bool UnEvaluatedProperties { get => Target . UnEvaluatedProperties ; set => Target . UnEvaluatedProperties = value ; }
139
+ public override bool UnEvaluatedProperties { get => _unEvaluatedProperties is not null ? _unEvaluatedProperties . Value : Target . UnEvaluatedProperties ; set => _unEvaluatedProperties = value ; }
100
140
/// <inheritdoc/>
101
- public override JsonSchemaType ? Type { get => Target . Type ; set => Target . Type = value ; }
141
+ public override JsonSchemaType ? Type { get => _type is not null ? _type . Value : Target . Type ; set => _type = value ; }
102
142
/// <inheritdoc/>
103
- public override string Const { get => Target . Const ; set => Target . Const = value ; }
143
+ public override string Const { get => string . IsNullOrEmpty ( _const ) ? Target . Const : _const ; set => _const = value ; }
104
144
/// <inheritdoc/>
105
- public override string Format { get => Target . Format ; set => Target . Format = value ; }
145
+ public override string Format { get => string . IsNullOrEmpty ( _format ) ? Target . Format : _format ; set => _format = value ; }
106
146
/// <inheritdoc/>
107
147
public override string Description
108
148
{
109
149
get => string . IsNullOrEmpty ( _description ) ? Target . Description : _description ;
110
150
set => _description = value ;
111
151
}
112
152
/// <inheritdoc/>
113
- public override decimal ? Maximum { get => Target . Maximum ; set => Target . Maximum = value ; }
153
+ public override decimal ? Maximum { get => _maximum is not null ? _maximum : Target . Maximum ; set => _maximum = value ; }
114
154
/// <inheritdoc/>
115
- public override bool ? ExclusiveMaximum { get => Target . ExclusiveMaximum ; set => Target . ExclusiveMaximum = value ; }
155
+ public override bool ? ExclusiveMaximum { get => _exclusiveMaximum is not null ? _exclusiveMaximum : Target . ExclusiveMaximum ; set => _exclusiveMaximum = value ; }
116
156
/// <inheritdoc/>
117
- public override decimal ? Minimum { get => Target . Minimum ; set => Target . Minimum = value ; }
157
+ public override decimal ? Minimum { get => _minimum is not null ? _minimum : Target . Minimum ; set => _minimum = value ; }
118
158
/// <inheritdoc/>
119
- public override bool ? ExclusiveMinimum { get => Target . ExclusiveMinimum ; set => Target . ExclusiveMinimum = value ; }
159
+ public override bool ? ExclusiveMinimum { get => _exclusiveMinimum is not null ? _exclusiveMinimum : Target . ExclusiveMinimum ; set => _exclusiveMinimum = value ; }
120
160
/// <inheritdoc/>
121
- public override int ? MaxLength { get => Target . MaxLength ; set => Target . MaxLength = value ; }
161
+ public override int ? MaxLength { get => _maxLength is not null ? _maxLength : Target . MaxLength ; set => _maxLength = value ; }
122
162
/// <inheritdoc/>
123
- public override int ? MinLength { get => Target . MinLength ; set => Target . MinLength = value ; }
163
+ public override int ? MinLength { get => _minLength is not null ? _minLength : Target . MinLength ; set => _minLength = value ; }
124
164
/// <inheritdoc/>
125
- public override string Pattern { get => Target . Pattern ; set => Target . Pattern = value ; }
165
+ public override string Pattern { get => string . IsNullOrEmpty ( _pattern ) ? Target . Pattern : _pattern ; set => _pattern = value ; }
126
166
/// <inheritdoc/>
127
- public override decimal ? MultipleOf { get => Target . MultipleOf ; set => Target . MultipleOf = value ; }
167
+ public override decimal ? MultipleOf { get => _multipleOf is not null ? _multipleOf : Target . MultipleOf ; set => _multipleOf = value ; }
128
168
/// <inheritdoc/>
129
169
public override JsonNode Default
130
170
{
131
- get => _default ??= Target . Default ;
171
+ get => _default ??= Target . Default ; //TODO normalize like other properties
132
172
set => _default = value ;
133
173
}
134
174
/// <inheritdoc/>
135
- public override bool ReadOnly { get => Target . ReadOnly ; set => Target . ReadOnly = value ; }
175
+ public override bool ReadOnly { get => _readOnly is not null ? _readOnly . Value : Target . ReadOnly ; set => _readOnly = value ; }
136
176
/// <inheritdoc/>
137
- public override bool WriteOnly { get => Target . WriteOnly ; set => Target . WriteOnly = value ; }
177
+ public override bool WriteOnly { get => _writeOnly is not null ? _writeOnly . Value : Target . WriteOnly ; set => _writeOnly = value ; }
138
178
/// <inheritdoc/>
139
- public override IList < OpenApiSchema > AllOf { get => Target . AllOf ; set => Target . AllOf = value ; }
179
+ public override IList < OpenApiSchema > AllOf { get => _allOf is not null ? _allOf : Target . AllOf ; set => _allOf = value ; }
140
180
/// <inheritdoc/>
141
- public override IList < OpenApiSchema > OneOf { get => Target . OneOf ; set => Target . OneOf = value ; }
181
+ public override IList < OpenApiSchema > OneOf { get => _oneOf is not null ? _oneOf : Target . OneOf ; set => _oneOf = value ; }
142
182
/// <inheritdoc/>
143
- public override IList < OpenApiSchema > AnyOf { get => Target . AnyOf ; set => Target . AnyOf = value ; }
183
+ public override IList < OpenApiSchema > AnyOf { get => _anyOf is not null ? _anyOf : Target . AnyOf ; set => _anyOf = value ; }
144
184
/// <inheritdoc/>
145
- public override OpenApiSchema Not { get => Target . Not ; set => Target . Not = value ; }
185
+ public override OpenApiSchema Not { get => _not is not null ? _not : Target . Not ; set => _not = value ; }
146
186
/// <inheritdoc/>
147
- public override ISet < string > Required { get => Target . Required ; set => Target . Required = value ; }
187
+ public override ISet < string > Required { get => _required is not null ? _required : Target . Required ; set => _required = value ; }
148
188
/// <inheritdoc/>
149
- public override OpenApiSchema Items { get => Target . Items ; set => Target . Items = value ; }
189
+ public override OpenApiSchema Items { get => _items is not null ? _items : Target . Items ; set => _items = value ; }
150
190
/// <inheritdoc/>
151
- public override int ? MaxItems { get => Target . MaxItems ; set => Target . MaxItems = value ; }
191
+ public override int ? MaxItems { get => _maxItems is not null ? _maxItems : Target . MaxItems ; set => _maxItems = value ; }
152
192
/// <inheritdoc/>
153
- public override int ? MinItems { get => Target . MinItems ; set => Target . MinItems = value ; }
193
+ public override int ? MinItems { get => _minItems is not null ? _minItems : Target . MinItems ; set => _minItems = value ; }
154
194
/// <inheritdoc/>
155
- public override bool ? UniqueItems { get => Target . UniqueItems ; set => Target . UniqueItems = value ; }
195
+ public override bool ? UniqueItems { get => _uniqueItems is not null ? _uniqueItems : Target . UniqueItems ; set => _uniqueItems = value ; }
156
196
/// <inheritdoc/>
157
- public override IDictionary < string , OpenApiSchema > Properties { get => Target . Properties ; set => Target . Properties = value ; }
197
+ public override IDictionary < string , OpenApiSchema > Properties { get => _properties is not null ? _properties : Target . Properties ; set => _properties = value ; }
158
198
/// <inheritdoc/>
159
- public override IDictionary < string , OpenApiSchema > PatternProperties { get => Target . PatternProperties ; set => Target . PatternProperties = value ; }
199
+ public override IDictionary < string , OpenApiSchema > PatternProperties { get => _patternProperties is not null ? _patternProperties : Target . PatternProperties ; set => _patternProperties = value ; }
160
200
/// <inheritdoc/>
161
- public override int ? MaxProperties { get => Target . MaxProperties ; set => Target . MaxProperties = value ; }
201
+ public override int ? MaxProperties { get => _maxProperties is not null ? _maxProperties : Target . MaxProperties ; set => _maxProperties = value ; }
162
202
/// <inheritdoc/>
163
- public override int ? MinProperties { get => Target . MinProperties ; set => Target . MinProperties = value ; }
203
+ public override int ? MinProperties { get => _minProperties is not null ? _minProperties : Target . MinProperties ; set => _minProperties = value ; }
164
204
/// <inheritdoc/>
165
- public override bool AdditionalPropertiesAllowed { get => Target . AdditionalPropertiesAllowed ; set => Target . AdditionalPropertiesAllowed = value ; }
205
+ public override bool AdditionalPropertiesAllowed { get => _additionalPropertiesAllowed is not null ? _additionalPropertiesAllowed . Value : Target . AdditionalPropertiesAllowed ; set => _additionalPropertiesAllowed = value ; }
166
206
/// <inheritdoc/>
167
- public override OpenApiSchema AdditionalProperties { get => Target . AdditionalProperties ; set => Target . AdditionalProperties = value ; }
207
+ public override OpenApiSchema AdditionalProperties { get => _additionalProperties is not null ? _additionalProperties : Target . AdditionalProperties ; set => _additionalProperties = value ; }
168
208
/// <inheritdoc/>
169
- public override OpenApiDiscriminator Discriminator { get => Target . Discriminator ; set => Target . Discriminator = value ; }
209
+ public override OpenApiDiscriminator Discriminator { get => _discriminator is not null ? _discriminator : Target . Discriminator ; set => _discriminator = value ; }
170
210
/// <inheritdoc/>
171
211
public override JsonNode Example
172
212
{
173
- get => _example ??= Target . Example ;
213
+ get => _example ??= Target . Example ; //TODO normalize like other properties
174
214
set => _example = value ;
175
215
}
176
216
/// <inheritdoc/>
177
217
public override IList < JsonNode > Examples
178
218
{
179
- get => _examples ??= Target . Examples ;
219
+ get => _examples ??= Target . Examples ; //TODO normalize like other properties
180
220
set => Target . Examples = value ;
181
221
}
182
222
/// <inheritdoc/>
183
- public override IList < JsonNode > Enum { get => Target . Enum ; set => Target . Enum = value ; }
223
+ public override IList < JsonNode > Enum { get => _enum is not null ? _enum : Target . Enum ; set => _enum = value ; }
184
224
/// <inheritdoc/>
185
- public override bool Nullable { get => Target . Nullable ; set => Target . Nullable = value ; }
225
+ public override bool Nullable { get => _nullable is null ? Target . Nullable : _nullable . Value ; set => _nullable = value ; }
186
226
/// <inheritdoc/>
187
- public override bool UnevaluatedProperties { get => Target . UnevaluatedProperties ; set => Target . UnevaluatedProperties = value ; }
227
+ public override bool UnevaluatedProperties { get => _unevaluatedProperties is not null ? _unevaluatedProperties . Value : Target . UnevaluatedProperties ; set => _unevaluatedProperties = value ; }
188
228
/// <inheritdoc/>
189
- public override OpenApiExternalDocs ExternalDocs { get => Target . ExternalDocs ; set => Target . ExternalDocs = value ; }
229
+ public override OpenApiExternalDocs ExternalDocs { get => _externalDocs is not null ? _externalDocs : Target . ExternalDocs ; set => _externalDocs = value ; }
190
230
/// <inheritdoc/>
191
- public override bool Deprecated { get => Target . Deprecated ; set => Target . Deprecated = value ; }
231
+ public override bool Deprecated { get => _deprecated is not null ? _deprecated . Value : Target . Deprecated ; set => _deprecated = value ; }
192
232
/// <inheritdoc/>
193
- public override OpenApiXml Xml { get => Target . Xml ; set => Target . Xml = value ; }
233
+ public override OpenApiXml Xml { get => _xml is not null ? _xml : Target . Xml ; set => _xml = value ; }
194
234
/// <inheritdoc/>
195
- public override IDictionary < string , IOpenApiExtension > Extensions { get => Target . Extensions ; set => Target . Extensions = value ; }
235
+ public override IDictionary < string , IOpenApiExtension > Extensions { get => _extensions is not null ? _extensions : Target . Extensions ; set => _extensions = value ; }
196
236
197
237
/// <inheritdoc/>
198
238
public override void SerializeAsV31 ( IOpenApiWriter writer )
@@ -240,7 +280,6 @@ public override void SerializeAsV2(IOpenApiWriter writer)
240
280
if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
241
281
{
242
282
_reference . SerializeAsV2 ( writer ) ;
243
- return ;
244
283
}
245
284
else
246
285
{
0 commit comments