Skip to content

Commit 93bd0b9

Browse files
committed
Copy over references for all IOpenApiReferenceable objects
1 parent ee3bf93 commit 93bd0b9

File tree

1 file changed

+90
-32
lines changed

1 file changed

+90
-32
lines changed

src/Microsoft.OpenApi/Services/CopyReferences.cs

Lines changed: 90 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,42 +26,87 @@ public override void Visit(IOpenApiReferenceable referenceable)
2626
switch (referenceable)
2727
{
2828
case OpenApiSchema schema:
29-
EnsureComponentsExists();
30-
EnsureSchemasExists();
29+
EnsureComponentsExist();
30+
EnsureSchemasExist();
3131
if (!Components.Schemas.ContainsKey(schema.Reference.Id))
3232
{
3333
Components.Schemas.Add(schema.Reference.Id, schema);
3434
}
3535
break;
3636

3737
case OpenApiParameter parameter:
38-
EnsureComponentsExists();
39-
EnsureParametersExists();
38+
EnsureComponentsExist();
39+
EnsureParametersExist();
4040
if (!Components.Parameters.ContainsKey(parameter.Reference.Id))
4141
{
4242
Components.Parameters.Add(parameter.Reference.Id, parameter);
4343
}
4444
break;
4545

4646
case OpenApiResponse response:
47-
EnsureComponentsExists();
48-
EnsureResponsesExists();
47+
EnsureComponentsExist();
48+
EnsureResponsesExist();
4949
if (!Components.Responses.ContainsKey(response.Reference.Id))
5050
{
5151
Components.Responses.Add(response.Reference.Id, response);
5252
}
5353
break;
5454

5555
case OpenApiRequestBody requestBody:
56-
EnsureComponentsExists();
57-
EnsureResponsesExists();
58-
EnsurRequestBodiesExists();
56+
EnsureComponentsExist();
57+
EnsureResponsesExist();
58+
EnsureRequestBodiesExist();
5959
if (!Components.RequestBodies.ContainsKey(requestBody.Reference.Id))
6060
{
6161
Components.RequestBodies.Add(requestBody.Reference.Id, requestBody);
6262
}
6363
break;
6464

65+
case OpenApiExample example:
66+
EnsureComponentsExist();
67+
EnsureExamplesExist();
68+
if (!Components.Examples.ContainsKey(example.Reference.Id))
69+
{
70+
Components.Examples.Add(example.Reference.Id, example);
71+
}
72+
break;
73+
74+
case OpenApiHeader header:
75+
EnsureComponentsExist();
76+
EnsureHeadersExist();
77+
if (!Components.Headers.ContainsKey(header.Reference.Id))
78+
{
79+
Components.Headers.Add(header.Reference.Id, header);
80+
}
81+
break;
82+
83+
case OpenApiCallback callback:
84+
EnsureComponentsExist();
85+
EnsureCallbacksExist();
86+
if (!Components.Callbacks.ContainsKey(callback.Reference.Id))
87+
{
88+
Components.Callbacks.Add(callback.Reference.Id, callback);
89+
}
90+
break;
91+
92+
case OpenApiLink link:
93+
EnsureComponentsExist();
94+
EnsureLinksExist();
95+
if (!Components.Links.ContainsKey(link.Reference.Id))
96+
{
97+
Components.Links.Add(link.Reference.Id, link);
98+
}
99+
break;
100+
101+
case OpenApiSecurityScheme securityScheme:
102+
EnsureComponentsExist();
103+
EnsureSecuritySchemesExist();
104+
if (!Components.SecuritySchemes.ContainsKey(securityScheme.Reference.Id))
105+
{
106+
Components.SecuritySchemes.Add(securityScheme.Reference.Id, securityScheme);
107+
}
108+
break;
109+
65110
default:
66111
break;
67112
}
@@ -77,8 +122,8 @@ public override void Visit(OpenApiSchema schema)
77122
// This is needed to handle schemas used in Responses in components
78123
if (schema.Reference != null)
79124
{
80-
EnsureComponentsExists();
81-
EnsureSchemasExists();
125+
EnsureComponentsExist();
126+
EnsureSchemasExist();
82127
if (!Components.Schemas.ContainsKey(schema.Reference.Id))
83128
{
84129
Components.Schemas.Add(schema.Reference.Id, schema);
@@ -87,41 +132,54 @@ public override void Visit(OpenApiSchema schema)
87132
base.Visit(schema);
88133
}
89134

90-
private void EnsureComponentsExists()
135+
private void EnsureComponentsExist()
91136
{
92-
if (_target.Components == null)
93-
{
94-
_target.Components = new();
95-
}
137+
_target.Components ??= new();
96138
}
97139

98-
private void EnsureSchemasExists()
140+
private void EnsureSchemasExist()
99141
{
100-
if (_target.Components.Schemas == null)
101-
{
102-
_target.Components.Schemas = new Dictionary<string, OpenApiSchema>();
103-
}
142+
_target.Components.Schemas ??= new Dictionary<string, OpenApiSchema>();
104143
}
105144

106-
private void EnsureParametersExists()
145+
private void EnsureParametersExist()
107146
{
108-
if (_target.Components.Parameters == null)
109-
{
110-
_target.Components.Parameters = new Dictionary<string, OpenApiParameter>();
111-
}
147+
_target.Components.Parameters ??= new Dictionary<string, OpenApiParameter>();
112148
}
113149

114-
private void EnsureResponsesExists()
150+
private void EnsureResponsesExist()
115151
{
116-
if (_target.Components.Responses == null)
117-
{
118-
_target.Components.Responses = new Dictionary<string, OpenApiResponse>();
119-
}
152+
_target.Components.Responses ??= new Dictionary<string, OpenApiResponse>();
120153
}
121154

122-
private void EnsurRequestBodiesExists()
155+
private void EnsureRequestBodiesExist()
123156
{
124157
_target.Components.RequestBodies ??= new Dictionary<string, OpenApiRequestBody>();
125158
}
159+
160+
private void EnsureExamplesExist()
161+
{
162+
_target.Components.Examples ??= new Dictionary<string, OpenApiExample>();
163+
}
164+
165+
private void EnsureHeadersExist()
166+
{
167+
_target.Components.Headers ??= new Dictionary<string, OpenApiHeader>();
168+
}
169+
170+
private void EnsureCallbacksExist()
171+
{
172+
_target.Components.Callbacks ??= new Dictionary<string, OpenApiCallback>();
173+
}
174+
175+
private void EnsureLinksExist()
176+
{
177+
_target.Components.Callbacks ??= new Dictionary<string, OpenApiCallback>();
178+
}
179+
180+
private void EnsureSecuritySchemesExist()
181+
{
182+
_target.Components.Callbacks ??= new Dictionary<string, OpenApiCallback>();
183+
}
126184
}
127185
}

0 commit comments

Comments
 (0)