Skip to content

Commit 9928a7b

Browse files
committed
chore: partial fix of the walker implementation for media type support
Signed-off-by: Vincent Biret <[email protected]>
1 parent c1a7106 commit 9928a7b

File tree

7 files changed

+33
-35
lines changed

7 files changed

+33
-35
lines changed

src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,14 @@ public virtual void Visit(OpenApiResponses response)
187187
/// <summary>
188188
/// Visits media type content.
189189
/// </summary>
190-
public virtual void Visit(IDictionary<string, OpenApiMediaType> content)
190+
public virtual void Visit(IDictionary<string, IOpenApiMediaType> content)
191191
{
192192
}
193193

194194
/// <summary>
195-
/// Visits <see cref="OpenApiMediaType"/>
195+
/// Visits <see cref="IOpenApiMediaType"/>
196196
/// </summary>
197-
public virtual void Visit(OpenApiMediaType mediaType)
197+
public virtual void Visit(IOpenApiMediaType mediaType)
198198
{
199199
}
200200

src/Microsoft.OpenApi/Services/OpenApiWalker.cs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ internal void Walk(IOpenApiParameter parameter, bool isComponent = false)
641641

642642
if (parameter.Content is { } content)
643643
{
644-
WalkItem(OpenApiConstants.Content, content, static (self, item) => self.Walk(item));
644+
WalkDictionary(OpenApiConstants.Content, content, static (self, item, isComponent) => self.Walk(item, isComponent));
645645
}
646646

647647
WalkDictionary(OpenApiConstants.Examples, parameter.Examples, static (self, item, isComponent) => self.Walk(item, isComponent));
@@ -696,7 +696,7 @@ internal void Walk(IOpenApiResponse response, bool isComponent = false)
696696

697697
if (response.Content is { } content)
698698
{
699-
WalkItem(OpenApiConstants.Content, content, static (self, item) => self.Walk(item));
699+
WalkDictionary(OpenApiConstants.Content, content, static (self, item, isComponent) => self.Walk(item, isComponent));
700700
}
701701

702702
WalkDictionary(OpenApiConstants.Links, response.Links, static (self, item, isComponent) => self.Walk(item, isComponent));
@@ -724,7 +724,7 @@ internal void Walk(IOpenApiRequestBody? requestBody, bool isComponent = false)
724724

725725
if (requestBody.Content is { } content)
726726
{
727-
WalkItem(OpenApiConstants.Content, content, static (self, item) => self.Walk(item));
727+
WalkDictionary(OpenApiConstants.Content, content, static (self, item, isComponent) => self.Walk(item, isComponent));
728728
}
729729

730730
Walk(requestBody as IOpenApiExtensible);
@@ -781,9 +781,9 @@ internal void Walk(IDictionary<string, IOpenApiCallback>? callbacks)
781781
}
782782

783783
/// <summary>
784-
/// Visits dictionary of <see cref="OpenApiMediaType"/>
784+
/// Visits dictionary of <see cref="IOpenApiMediaType"/>
785785
/// </summary>
786-
internal void Walk(IDictionary<string, OpenApiMediaType>? content)
786+
internal void Walk(IDictionary<string, IOpenApiMediaType>? content)
787787
{
788788
if (content == null)
789789
{
@@ -806,9 +806,9 @@ internal void Walk(IDictionary<string, OpenApiMediaType>? content)
806806
}
807807

808808
/// <summary>
809-
/// Visits <see cref="OpenApiMediaType"/> and child objects
809+
/// Visits <see cref="IOpenApiMediaType"/> and child objects
810810
/// </summary>
811-
internal void Walk(OpenApiMediaType mediaType)
811+
internal void Walk(IOpenApiMediaType mediaType)
812812
{
813813
if (mediaType == null)
814814
{
@@ -850,7 +850,7 @@ internal void Walk(IOpenApiMediaType mediaType, bool isComponent = false)
850850

851851
if (mediaType is OpenApiMediaType openApiMediaType)
852852
{
853-
Walk(openApiMediaType);
853+
Walk((IOpenApiMediaType)openApiMediaType);
854854
}
855855
}
856856

@@ -1187,7 +1187,7 @@ internal void Walk(IOpenApiHeader header, bool isComponent = false)
11871187

11881188
if (header.Content is { } content)
11891189
{
1190-
WalkItem(OpenApiConstants.Content, content, static (self, item) => self.Walk(item));
1190+
WalkDictionary(OpenApiConstants.Content, content, static (self, item, isComponent) => self.Walk(item, isComponent));
11911191
}
11921192

11931193
if (header.Example is { } example)
@@ -1273,27 +1273,25 @@ internal void Walk(IOpenApiElement element)
12731273
case IOpenApiCallback e: Walk(e); break;
12741274
case OpenApiEncoding e: Walk(e); break;
12751275
case IOpenApiExample e: Walk(e); break;
1276-
case Dictionary<string, IOpenApiExample> e: Walk(e); break;
12771276
case OpenApiExternalDocs e: Walk(e); break;
1278-
case OpenApiHeader e: Walk(e); break;
1279-
case OpenApiLink e: Walk(e); break;
1280-
case Dictionary<string, IOpenApiLink> e: Walk(e); break;
1281-
case OpenApiMediaType e: Walk(e); break;
1277+
case IOpenApiHeader e: Walk(e); break;
1278+
case IOpenApiLink e: Walk(e); break;
1279+
case IOpenApiMediaType e: Walk(e); break;
12821280
case OpenApiOAuthFlows e: Walk(e); break;
12831281
case OpenApiOAuthFlow e: Walk(e); break;
12841282
case OpenApiOperation e: Walk(e); break;
12851283
case IOpenApiParameter e: Walk(e); break;
12861284
case OpenApiPaths e: Walk(e); break;
1285+
case IOpenApiPathItem e: Walk(e); break;
12871286
case OpenApiRequestBody e: Walk(e); break;
1288-
case OpenApiResponse e: Walk(e); break;
1289-
case OpenApiSchema e: Walk(e); break;
1287+
case IOpenApiResponse e: Walk(e); break;
1288+
case IOpenApiSchema e: Walk(e); break;
12901289
case OpenApiDiscriminator e: Walk(e); break;
12911290
case OpenApiSecurityRequirement e: Walk(e); break;
1292-
case OpenApiSecurityScheme e: Walk(e); break;
1291+
case IOpenApiSecurityScheme e: Walk(e); break;
12931292
case OpenApiServer e: Walk(e); break;
12941293
case OpenApiServerVariable e: Walk(e); break;
12951294
case OpenApiTag e: Walk(e); break;
1296-
case HashSet<OpenApiTag> e: Walk(e); break;
12971295
case IOpenApiExtensible e: Walk(e); break;
12981296
case IOpenApiExtension e: Walk(e); break;
12991297
}

src/Microsoft.OpenApi/Validations/OpenApiValidator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void AddWarning(OpenApiValidatorWarning warning)
7777
public override void Visit(IOpenApiResponse response) => Validate(response);
7878

7979
/// <inheritdoc/>
80-
public override void Visit(OpenApiMediaType mediaType) => Validate(mediaType);
80+
public override void Visit(IOpenApiMediaType mediaType) => Validate(mediaType);
8181

8282
/// <inheritdoc/>
8383
public override void Visit(OpenApiResponses response) => Validate(response);
@@ -151,7 +151,7 @@ public void AddWarning(OpenApiValidatorWarning warning)
151151
/// <inheritdoc/>
152152
public override void Visit(IDictionary<string, IOpenApiCallback> callbacks) => Validate(callbacks, callbacks.GetType());
153153
/// <inheritdoc/>
154-
public override void Visit(IDictionary<string, OpenApiMediaType> content) => Validate(content, content.GetType());
154+
public override void Visit(IDictionary<string, IOpenApiMediaType> content) => Validate(content, content.GetType());
155155
/// <inheritdoc/>
156156
public override void Visit(IDictionary<string, IOpenApiExample> examples) => Validate(examples, examples.GetType());
157157
/// <inheritdoc/>

test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,7 @@ namespace Microsoft.OpenApi
15191519
public override void Visit(Microsoft.OpenApi.IOpenApiExtension openApiExtension) { }
15201520
public override void Visit(Microsoft.OpenApi.IOpenApiHeader header) { }
15211521
public override void Visit(Microsoft.OpenApi.IOpenApiLink link) { }
1522+
public override void Visit(Microsoft.OpenApi.IOpenApiMediaType mediaType) { }
15221523
public override void Visit(Microsoft.OpenApi.IOpenApiParameter parameter) { }
15231524
public override void Visit(Microsoft.OpenApi.IOpenApiPathItem pathItem) { }
15241525
public override void Visit(Microsoft.OpenApi.IOpenApiRequestBody requestBody) { }
@@ -1532,7 +1533,6 @@ namespace Microsoft.OpenApi
15321533
public override void Visit(Microsoft.OpenApi.OpenApiExternalDocs externalDocs) { }
15331534
public override void Visit(Microsoft.OpenApi.OpenApiInfo info) { }
15341535
public override void Visit(Microsoft.OpenApi.OpenApiLicense license) { }
1535-
public override void Visit(Microsoft.OpenApi.OpenApiMediaType mediaType) { }
15361536
public override void Visit(Microsoft.OpenApi.OpenApiOAuthFlow openApiOAuthFlow) { }
15371537
public override void Visit(Microsoft.OpenApi.OpenApiOperation operation) { }
15381538
public override void Visit(Microsoft.OpenApi.OpenApiPaths paths) { }
@@ -1546,8 +1546,8 @@ namespace Microsoft.OpenApi
15461546
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiExample> examples) { }
15471547
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiHeader> headers) { }
15481548
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiLink> links) { }
1549+
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiMediaType> content) { }
15491550
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.OpenApiEncoding> encodings) { }
1550-
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.OpenApiMediaType> content) { }
15511551
public override void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.OpenApiServerVariable> serverVariables) { }
15521552
public override void Visit(System.Collections.Generic.List<Microsoft.OpenApi.IOpenApiExample> example) { }
15531553
}
@@ -1574,6 +1574,7 @@ namespace Microsoft.OpenApi
15741574
public virtual void Visit(Microsoft.OpenApi.IOpenApiExtension openApiExtension) { }
15751575
public virtual void Visit(Microsoft.OpenApi.IOpenApiHeader header) { }
15761576
public virtual void Visit(Microsoft.OpenApi.IOpenApiLink link) { }
1577+
public virtual void Visit(Microsoft.OpenApi.IOpenApiMediaType mediaType) { }
15771578
public virtual void Visit(Microsoft.OpenApi.IOpenApiParameter parameter) { }
15781579
public virtual void Visit(Microsoft.OpenApi.IOpenApiPathItem pathItem) { }
15791580
public virtual void Visit(Microsoft.OpenApi.IOpenApiReferenceHolder referenceHolder) { }
@@ -1588,7 +1589,6 @@ namespace Microsoft.OpenApi
15881589
public virtual void Visit(Microsoft.OpenApi.OpenApiExternalDocs externalDocs) { }
15891590
public virtual void Visit(Microsoft.OpenApi.OpenApiInfo info) { }
15901591
public virtual void Visit(Microsoft.OpenApi.OpenApiLicense license) { }
1591-
public virtual void Visit(Microsoft.OpenApi.OpenApiMediaType mediaType) { }
15921592
public virtual void Visit(Microsoft.OpenApi.OpenApiOAuthFlow openApiOAuthFlow) { }
15931593
public virtual void Visit(Microsoft.OpenApi.OpenApiOperation operation) { }
15941594
public virtual void Visit(Microsoft.OpenApi.OpenApiPaths paths) { }
@@ -1603,9 +1603,9 @@ namespace Microsoft.OpenApi
16031603
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiExample> examples) { }
16041604
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiHeader> headers) { }
16051605
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiLink> links) { }
1606+
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiMediaType> content) { }
16061607
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.IOpenApiPathItem> webhooks) { }
16071608
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.OpenApiEncoding> encodings) { }
1608-
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.OpenApiMediaType> content) { }
16091609
public virtual void Visit(System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.OpenApiServerVariable> serverVariables) { }
16101610
public virtual void Visit(System.Collections.Generic.IList<Microsoft.OpenApi.IOpenApiParameter> parameters) { }
16111611
public virtual void Visit(System.Collections.Generic.IList<Microsoft.OpenApi.OpenApiSecurityRequirement> openApiSecurityRequirements) { }

test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void ValidateExampleShouldNotHaveDataTypeMismatchForSimpleSchema()
2828
var ruleset = ValidationRuleSet.GetDefaultRuleSet();
2929
var validator = new OpenApiValidator(ruleset);
3030
var walker = new OpenApiWalker(validator);
31-
walker.Walk(mediaType);
31+
walker.Walk((IOpenApiMediaType)mediaType);
3232

3333
warnings = validator.Warnings;
3434
var result = !warnings.Any();
@@ -87,7 +87,7 @@ public void ValidateExamplesShouldNotHaveDataTypeMismatchForSimpleSchema()
8787
var ruleset = ValidationRuleSet.GetDefaultRuleSet();
8888
var validator = new OpenApiValidator(ruleset);
8989
var walker = new OpenApiWalker(validator);
90-
walker.Walk(mediaType);
90+
walker.Walk((IOpenApiMediaType)mediaType);
9191

9292
warnings = validator.Warnings;
9393
var result = !warnings.Any();

test/Microsoft.OpenApi.Tests/Visitors/InheritanceTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ public void ExpectedVirtualsInvolved()
3333
visitor.Visit(default(Dictionary<string, IOpenApiCallback>));
3434
visitor.Visit(default(IOpenApiResponse));
3535
visitor.Visit(default(OpenApiResponses));
36-
visitor.Visit(default(Dictionary<string, OpenApiMediaType>));
37-
visitor.Visit(default(OpenApiMediaType));
36+
visitor.Visit(default(Dictionary<string, IOpenApiMediaType>));
37+
visitor.Visit(default(IOpenApiMediaType));
3838
visitor.Visit(default(OpenApiEncoding));
3939
visitor.Visit(default(Dictionary<string, IOpenApiExample>));
4040
visitor.Visit(default(OpenApiComponents));
@@ -192,13 +192,13 @@ public override void Visit(OpenApiResponses response)
192192
base.Visit(response);
193193
}
194194

195-
public override void Visit(IDictionary<string, OpenApiMediaType> content)
195+
public override void Visit(IDictionary<string, IOpenApiMediaType> content)
196196
{
197197
EncodeCall();
198198
base.Visit(content);
199199
}
200200

201-
public override void Visit(OpenApiMediaType mediaType)
201+
public override void Visit(IOpenApiMediaType mediaType)
202202
{
203203
EncodeCall();
204204
base.Visit(mediaType);

test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,12 @@ public override void Visit(IOpenApiReferenceHolder referenceable)
297297
{
298298
Locations.Add("referenceAt: " + this.PathString);
299299
}
300-
public override void Visit(IDictionary<string, OpenApiMediaType> content)
300+
public override void Visit(IDictionary<string, IOpenApiMediaType> content)
301301
{
302302
Locations.Add(this.PathString);
303303
}
304304

305-
public override void Visit(OpenApiMediaType mediaType)
305+
public override void Visit(IOpenApiMediaType mediaType)
306306
{
307307
Keys.Add(CurrentKeys.Content);
308308
Locations.Add(this.PathString);

0 commit comments

Comments
 (0)