Skip to content

Commit 2ddc0a7

Browse files
committed
Updated openapiworkspace from vnext
2 parents 35a9fc5 + 2db9643 commit 2ddc0a7

22 files changed

+2278
-387
lines changed

.vscode/settings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"workbench.colorCustomizations": {
3+
"activityBar.background": "#03323C",
4+
"titleBar.activeBackground": "#054754",
5+
"titleBar.activeForeground": "#F0FCFE"
6+
}
7+
}

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
The **OpenAPI.NET** SDK contains a useful object model for OpenAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.
1212

13-
**See more information on the OpenAPI specification and its history here: <a href="https://www.openapis.org">Open API Initiative</a>**
13+
**See more information on the OpenAPI specification and its history here: <a href="https://www.openapis.org">OpenAPI Initiative</a>**
1414

1515
Project Objectives
1616

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,10 +330,18 @@ public IEnumerable<OpenApiError> ResolveReferences(bool useExternal = false)
330330
return resolver.Errors;
331331
}
332332

333-
/// <summary>
334-
/// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object
335-
/// </summary>
336-
public IOpenApiReferenceable ResolveReference(OpenApiReference reference, bool useExternal = false)
333+
/// <summary>
334+
/// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object
335+
/// </summary>
336+
public IOpenApiReferenceable ResolveReference(OpenApiReference reference)
337+
{
338+
return ResolveReference(reference, false);
339+
}
340+
341+
/// <summary>
342+
/// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object
343+
/// </summary>
344+
public IOpenApiReferenceable ResolveReference(OpenApiReference reference, bool useExternal)
337345
{
338346
if (reference == null)
339347
{

src/Microsoft.OpenApi/Services/OpenApiExampleComparer.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,35 @@ public override void Compare(
4242
return;
4343
}
4444

45-
new OpenApiReferenceComparer<OpenApiExample>()
46-
.Compare(sourceExample.Reference, targetExample.Reference, comparisonContext);
45+
if (sourceExample.Reference != null
46+
&& targetExample.Reference != null
47+
&& sourceExample.Reference.Id != targetExample.Reference.Id)
48+
{
49+
WalkAndAddOpenApiDifference(
50+
comparisonContext,
51+
OpenApiConstants.DollarRef,
52+
new OpenApiDifference
53+
{
54+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
55+
SourceValue = sourceExample.Reference,
56+
TargetValue = targetExample.Reference,
57+
OpenApiComparedElementType = typeof(OpenApiReference)
58+
});
59+
60+
return;
61+
}
62+
63+
if (sourceExample.Reference != null)
64+
{
65+
sourceExample = (OpenApiExample)comparisonContext.SourceDocument.ResolveReference(
66+
sourceExample.Reference);
67+
}
68+
69+
if (targetExample.Reference != null)
70+
{
71+
targetExample = (OpenApiExample)comparisonContext.TargetDocument.ResolveReference(
72+
targetExample.Reference);
73+
}
4774

4875
WalkAndCompare(comparisonContext, OpenApiConstants.Description,
4976
() => Compare(sourceExample.Description, targetExample.Description, comparisonContext));

src/Microsoft.OpenApi/Services/OpenApiParameterComparer.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,35 @@ public override void Compare(
4343
return;
4444
}
4545

46-
new OpenApiReferenceComparer<OpenApiParameter>()
47-
.Compare(sourceParameter.Reference, targetParameter.Reference, comparisonContext);
46+
if (sourceParameter.Reference != null
47+
&& targetParameter.Reference != null
48+
&& sourceParameter.Reference.Id != targetParameter.Reference.Id)
49+
{
50+
WalkAndAddOpenApiDifference(
51+
comparisonContext,
52+
OpenApiConstants.DollarRef,
53+
new OpenApiDifference
54+
{
55+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
56+
SourceValue = sourceParameter.Reference,
57+
TargetValue = targetParameter.Reference,
58+
OpenApiComparedElementType = typeof(OpenApiReference)
59+
});
60+
61+
return;
62+
}
63+
64+
if (sourceParameter.Reference != null)
65+
{
66+
sourceParameter = (OpenApiParameter)comparisonContext.SourceDocument.ResolveReference(
67+
sourceParameter.Reference);
68+
}
69+
70+
if (targetParameter.Reference != null)
71+
{
72+
targetParameter = (OpenApiParameter)comparisonContext.TargetDocument.ResolveReference(
73+
targetParameter.Reference);
74+
}
4875

4976
WalkAndCompare(
5077
comparisonContext,

src/Microsoft.OpenApi/Services/OpenApiRequestBodyComparer.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,35 @@ public override void Compare(
4242
return;
4343
}
4444

45-
new OpenApiReferenceComparer<OpenApiRequestBody>()
46-
.Compare(sourceRequestBody.Reference, targetRequestBody.Reference, comparisonContext);
45+
if (sourceRequestBody.Reference != null
46+
&& targetRequestBody.Reference != null
47+
&& sourceRequestBody.Reference.Id != targetRequestBody.Reference.Id)
48+
{
49+
WalkAndAddOpenApiDifference(
50+
comparisonContext,
51+
OpenApiConstants.DollarRef,
52+
new OpenApiDifference
53+
{
54+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
55+
SourceValue = sourceRequestBody.Reference,
56+
TargetValue = targetRequestBody.Reference,
57+
OpenApiComparedElementType = typeof(OpenApiReference)
58+
});
59+
60+
return;
61+
}
62+
63+
if (sourceRequestBody.Reference != null)
64+
{
65+
sourceRequestBody = (OpenApiRequestBody)comparisonContext.SourceDocument.ResolveReference(
66+
sourceRequestBody.Reference);
67+
}
68+
69+
if (targetRequestBody.Reference != null)
70+
{
71+
targetRequestBody = (OpenApiRequestBody)comparisonContext.TargetDocument.ResolveReference(
72+
targetRequestBody.Reference);
73+
}
4774

4875
WalkAndCompare(comparisonContext, OpenApiConstants.Description,
4976
() => Compare(sourceRequestBody.Description, targetRequestBody.Description, comparisonContext));

src/Microsoft.OpenApi/Services/OpenApiSchemaComparer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public override void Compare(
4444
}
4545

4646
if (comparisonContext.SourceSchemaLoop.Contains(sourceSchema)
47-
|| comparisonContext.SourceSchemaLoop.Contains(targetSchema))
47+
|| comparisonContext.TargetSchemaLoop.Contains(targetSchema))
4848
{
4949
return; // Loop detected, this schema has already been walked.
5050
}

src/Microsoft.OpenApi/Services/OpenApiSecuritySchemeComparer.cs

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,26 @@ public class OpenApiSecuritySchemeComparer : OpenApiComparerBase<OpenApiSecurity
1313
/// <summary>
1414
/// Executes comparision against source and target <see cref="OpenApiSecurityScheme"/>.
1515
/// </summary>
16-
/// <param name="sourcecSecurityScheme">The source.</param>
16+
/// <param name="sourceSecurityScheme">The source.</param>
1717
/// <param name="targetSecurityScheme">The target.</param>
1818
/// <param name="comparisonContext">Context under which to compare the source and target.</param>
1919
public override void Compare(
20-
OpenApiSecurityScheme sourcecSecurityScheme,
20+
OpenApiSecurityScheme sourceSecurityScheme,
2121
OpenApiSecurityScheme targetSecurityScheme,
2222
ComparisonContext comparisonContext)
2323
{
24-
if (sourcecSecurityScheme == null && targetSecurityScheme == null)
24+
if (sourceSecurityScheme == null && targetSecurityScheme == null)
2525
{
2626
return;
2727
}
2828

29-
if (sourcecSecurityScheme == null || targetSecurityScheme == null)
29+
if (sourceSecurityScheme == null || targetSecurityScheme == null)
3030
{
3131
comparisonContext.AddOpenApiDifference(
3232
new OpenApiDifference
3333
{
3434
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
35-
SourceValue = sourcecSecurityScheme,
35+
SourceValue = sourceSecurityScheme,
3636
TargetValue = targetSecurityScheme,
3737
OpenApiComparedElementType = typeof(OpenApiSecurityScheme),
3838
Pointer = comparisonContext.PathString
@@ -41,40 +41,66 @@ public override void Compare(
4141
return;
4242
}
4343

44-
new OpenApiReferenceComparer<OpenApiSecurityScheme>()
45-
.Compare(sourcecSecurityScheme.Reference, targetSecurityScheme.Reference,
46-
comparisonContext);
44+
if (sourceSecurityScheme.Reference != null
45+
&& targetSecurityScheme.Reference != null
46+
&& sourceSecurityScheme.Reference.Id != targetSecurityScheme.Reference.Id)
47+
{
48+
WalkAndAddOpenApiDifference(
49+
comparisonContext,
50+
OpenApiConstants.DollarRef,
51+
new OpenApiDifference
52+
{
53+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
54+
SourceValue = sourceSecurityScheme.Reference,
55+
TargetValue = targetSecurityScheme.Reference,
56+
OpenApiComparedElementType = typeof(OpenApiReference)
57+
});
58+
59+
return;
60+
}
61+
62+
if (sourceSecurityScheme.Reference != null)
63+
{
64+
sourceSecurityScheme = (OpenApiSecurityScheme)comparisonContext.SourceDocument.ResolveReference(
65+
sourceSecurityScheme.Reference);
66+
}
67+
68+
if (targetSecurityScheme.Reference != null)
69+
{
70+
targetSecurityScheme = (OpenApiSecurityScheme)comparisonContext.TargetDocument.ResolveReference(
71+
targetSecurityScheme.Reference);
72+
}
4773

4874
WalkAndCompare(comparisonContext, OpenApiConstants.Description,
49-
() => Compare(sourcecSecurityScheme.Description, targetSecurityScheme.Description, comparisonContext));
75+
() => Compare(sourceSecurityScheme.Description, targetSecurityScheme.Description, comparisonContext));
5076

5177
WalkAndCompare(comparisonContext, OpenApiConstants.Type,
52-
() => Compare<SecuritySchemeType>(sourcecSecurityScheme.Type, targetSecurityScheme.Type,
78+
() => Compare<SecuritySchemeType>(sourceSecurityScheme.Type, targetSecurityScheme.Type,
5379
comparisonContext));
5480

5581
WalkAndCompare(comparisonContext, OpenApiConstants.Name,
56-
() => Compare(sourcecSecurityScheme.Name, targetSecurityScheme.Name, comparisonContext));
82+
() => Compare(sourceSecurityScheme.Name, targetSecurityScheme.Name, comparisonContext));
5783

5884
WalkAndCompare(comparisonContext, OpenApiConstants.In,
59-
() => Compare<ParameterLocation>(sourcecSecurityScheme.In, targetSecurityScheme.In, comparisonContext));
85+
() => Compare<ParameterLocation>(sourceSecurityScheme.In, targetSecurityScheme.In, comparisonContext));
6086

6187
WalkAndCompare(comparisonContext, OpenApiConstants.Scheme,
62-
() => Compare(sourcecSecurityScheme.Scheme, targetSecurityScheme.Scheme, comparisonContext));
88+
() => Compare(sourceSecurityScheme.Scheme, targetSecurityScheme.Scheme, comparisonContext));
6389

6490
WalkAndCompare(comparisonContext, OpenApiConstants.BearerFormat,
65-
() => Compare(sourcecSecurityScheme.BearerFormat, targetSecurityScheme.BearerFormat,
91+
() => Compare(sourceSecurityScheme.BearerFormat, targetSecurityScheme.BearerFormat,
6692
comparisonContext));
6793

6894
WalkAndCompare(comparisonContext, OpenApiConstants.OpenIdConnectUrl,
69-
() => Compare(sourcecSecurityScheme.OpenIdConnectUrl, targetSecurityScheme.OpenIdConnectUrl,
95+
() => Compare(sourceSecurityScheme.OpenIdConnectUrl, targetSecurityScheme.OpenIdConnectUrl,
7096
comparisonContext));
7197

7298
WalkAndCompare(
7399
comparisonContext,
74100
OpenApiConstants.Flows,
75101
() => comparisonContext
76102
.GetComparer<OpenApiOAuthFlows>()
77-
.Compare(sourcecSecurityScheme.Flows, targetSecurityScheme.Flows, comparisonContext));
103+
.Compare(sourceSecurityScheme.Flows, targetSecurityScheme.Flows, comparisonContext));
78104
}
79105
}
80106
}

src/Microsoft.OpenApi/Services/OpenApiWalker.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,11 @@ internal void Walk(OpenApiEncoding encoding)
732732
}
733733

734734
_visitor.Visit(encoding);
735+
736+
if (encoding.Headers != null)
737+
{
738+
Walk(encoding.Headers);
739+
}
735740
Walk(encoding as IOpenApiExtensible);
736741
}
737742

@@ -787,6 +792,11 @@ internal void Walk(OpenApiSchema schema, bool isComponent = false)
787792
});
788793
}
789794

795+
if (schema.AdditionalProperties != null)
796+
{
797+
Walk("additionalProperties", () => Walk(schema.AdditionalProperties));
798+
}
799+
790800
Walk(OpenApiConstants.ExternalDocs, () => Walk(schema.ExternalDocs));
791801

792802
Walk(schema as IOpenApiExtensible);

src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public abstract class OpenApiWriterBase : IOpenApiWriter
2424
/// <summary>
2525
/// The indentation string to prepand to each line for each indentation level.
2626
/// </summary>
27-
private const string IndentationString = " ";
27+
protected const string IndentationString = " ";
2828

2929
/// <summary>
3030
/// Scope of the Open API element - object, array, property.

0 commit comments

Comments
 (0)