Skip to content

Commit 6525525

Browse files
committed
Clean up code and add virtual keyword in V2 serializers for the proxy reference classes to override
1 parent 607751a commit 6525525

File tree

10 files changed

+15
-307
lines changed

10 files changed

+15
-307
lines changed

src/Microsoft.OpenApi/Models/OpenApiCallback.cs

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models
1212
/// <summary>
1313
/// Callback Object: A map of possible out-of band callbacks related to the parent operation.
1414
/// </summary>
15-
public class OpenApiCallback : IOpenApiReferenceable, IOpenApiExtensible, IEffective<OpenApiCallback>
15+
public class OpenApiCallback : IOpenApiReferenceable, IOpenApiExtensible
1616
{
1717
/// <summary>
1818
/// A Path Item Object used to define a callback request and expected responses.
@@ -61,10 +61,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem)
6161
Utils.CheckArgumentNull(expression);
6262
Utils.CheckArgumentNull(pathItem);
6363

64-
if (PathItems == null)
65-
{
66-
PathItems = new();
67-
}
64+
PathItems ??= new();
6865

6966
PathItems.Add(expression, pathItem);
7067
}
@@ -102,41 +99,9 @@ private void SerializeInternal(IOpenApiWriter writer,
10299
Utils.CheckArgumentNull(writer);
103100

104101
var target = this;
105-
var isProxyReference = target.GetType().Name.Contains("Reference");
106-
107-
if (Reference != null && !isProxyReference)
108-
{
109-
if (!writer.GetSettings().ShouldInlineReference(Reference))
110-
{
111-
callback(writer, Reference);
112-
return;
113-
}
114-
else
115-
{
116-
target = GetEffective(Reference.HostDocument);
117-
}
118-
}
119-
120102
action(writer, target);
121103
}
122104

123-
/// <summary>
124-
/// Returns an effective OpenApiCallback object based on the presence of a $ref
125-
/// </summary>
126-
/// <param name="doc">The host OpenApiDocument that contains the reference.</param>
127-
/// <returns>OpenApiCallback</returns>
128-
public OpenApiCallback GetEffective(OpenApiDocument doc)
129-
{
130-
if (Reference != null)
131-
{
132-
return doc.ResolveReferenceTo<OpenApiCallback>(Reference);
133-
}
134-
else
135-
{
136-
return this;
137-
}
138-
}
139-
140105
/// <summary>
141106
/// Serialize to OpenAPI V31 document without using reference.
142107
/// </summary>

src/Microsoft.OpenApi/Models/OpenApiExample.cs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Microsoft.OpenApi.Models
1313
/// <summary>
1414
/// Example Object.
1515
/// </summary>
16-
public class OpenApiExample : IOpenApiReferenceable, IOpenApiExtensible, IEffective<OpenApiExample>
16+
public class OpenApiExample : IOpenApiReferenceable, IOpenApiExtensible
1717
{
1818
/// <summary>
1919
/// Short description for the example.
@@ -101,40 +101,9 @@ internal virtual void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWr
101101
Utils.CheckArgumentNull(writer);
102102

103103
var target = this;
104-
var isProxyReference = target.GetType().Name.Contains("Reference");
105-
106-
if (Reference != null && !isProxyReference)
107-
{
108-
if (!writer.GetSettings().ShouldInlineReference(Reference))
109-
{
110-
callback(writer, Reference);
111-
return;
112-
}
113-
else
114-
{
115-
target = GetEffective(Reference.HostDocument);
116-
}
117-
}
118104
action(writer, target);
119105
}
120106

121-
/// <summary>
122-
/// Returns an effective OpenApiExample object based on the presence of a $ref
123-
/// </summary>
124-
/// <param name="doc">The host OpenApiDocument that contains the reference.</param>
125-
/// <returns>OpenApiExample</returns>
126-
public OpenApiExample GetEffective(OpenApiDocument doc)
127-
{
128-
if (Reference != null)
129-
{
130-
return doc.ResolveReferenceTo<OpenApiExample>(this.Reference);
131-
}
132-
else
133-
{
134-
return this;
135-
}
136-
}
137-
138107
/// <summary>
139108
/// Serialize to OpenAPI V31 example without using reference.
140109
/// </summary>

src/Microsoft.OpenApi/Models/OpenApiHeader.cs

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace Microsoft.OpenApi.Models
1616
/// Header Object.
1717
/// The Header Object follows the structure of the Parameter Object.
1818
/// </summary>
19-
public class OpenApiHeader : IOpenApiReferenceable, IOpenApiExtensible, IEffective<OpenApiHeader>
19+
public class OpenApiHeader : IOpenApiReferenceable, IOpenApiExtensible
2020
{
2121
private JsonSchema _schema;
2222

@@ -145,41 +145,9 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
145145
Utils.CheckArgumentNull(writer);;
146146

147147
var target = this;
148-
var isProxyReference = target.GetType().Name.Contains("Reference");
149-
150-
if (Reference != null && !isProxyReference)
151-
{
152-
if (!writer.GetSettings().ShouldInlineReference(Reference))
153-
{
154-
callback(writer, Reference);
155-
return;
156-
}
157-
else
158-
{
159-
target = GetEffective(Reference.HostDocument);
160-
}
161-
}
162-
163148
action(writer, target);
164149
}
165150

166-
/// <summary>
167-
/// Returns an effective OpenApiHeader object based on the presence of a $ref
168-
/// </summary>
169-
/// <param name="doc">The host OpenApiDocument that contains the reference.</param>
170-
/// <returns>OpenApiHeader</returns>
171-
public OpenApiHeader GetEffective(OpenApiDocument doc)
172-
{
173-
if (Reference != null)
174-
{
175-
return doc.ResolveReferenceTo<OpenApiHeader>(Reference);
176-
}
177-
else
178-
{
179-
return this;
180-
}
181-
}
182-
183151
/// <summary>
184152
/// Serialize to OpenAPI V31 document without using reference.
185153
/// </summary>
@@ -245,25 +213,11 @@ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, O
245213
/// <summary>
246214
/// Serialize <see cref="OpenApiHeader"/> to Open Api v2.0
247215
/// </summary>
248-
public void SerializeAsV2(IOpenApiWriter writer)
216+
public virtual void SerializeAsV2(IOpenApiWriter writer)
249217
{
250218
Utils.CheckArgumentNull(writer);
251219

252220
var target = this;
253-
var isProxyReference = target.GetType().Name.Contains("Reference");
254-
255-
if (Reference != null && !isProxyReference)
256-
{
257-
if (!writer.GetSettings().ShouldInlineReference(Reference))
258-
{
259-
Reference.SerializeAsV2(writer);
260-
return;
261-
}
262-
else
263-
{
264-
target = GetEffective(Reference.HostDocument);
265-
}
266-
}
267221
target.SerializeAsV2WithoutReference(writer);
268222
}
269223

src/Microsoft.OpenApi/Models/OpenApiLink.cs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models
1111
/// <summary>
1212
/// Link Object.
1313
/// </summary>
14-
public class OpenApiLink : IOpenApiReferenceable, IOpenApiExtensible, IEffective<OpenApiLink>
14+
public class OpenApiLink : IOpenApiReferenceable, IOpenApiExtensible
1515
{
1616
/// <summary>
1717
/// A relative or absolute reference to an OAS operation.
@@ -106,40 +106,9 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
106106
Utils.CheckArgumentNull(writer);
107107

108108
var target = this;
109-
var isProxyReference = target.GetType().Name.Contains("Reference");
110-
111-
if (Reference != null && !isProxyReference)
112-
{
113-
if (!writer.GetSettings().ShouldInlineReference(Reference))
114-
{
115-
callback(writer, Reference);
116-
return;
117-
}
118-
else
119-
{
120-
target = GetEffective(Reference.HostDocument);
121-
}
122-
}
123109
action(writer, target);
124110
}
125111

126-
/// <summary>
127-
/// Returns an effective OpenApiLink object based on the presence of a $ref
128-
/// </summary>
129-
/// <param name="doc">The host OpenApiDocument that contains the reference.</param>
130-
/// <returns>OpenApiLink</returns>
131-
public OpenApiLink GetEffective(OpenApiDocument doc)
132-
{
133-
if (Reference != null)
134-
{
135-
return doc.ResolveReferenceTo<OpenApiLink>(Reference);
136-
}
137-
else
138-
{
139-
return this;
140-
}
141-
}
142-
143112
/// <summary>
144113
/// Serialize to OpenAPI V31 document without using reference.
145114
/// </summary>

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -200,20 +200,6 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
200200
Utils.CheckArgumentNull(writer);;
201201

202202
var target = this;
203-
var isProxyReference = target.GetType().Name.Contains("Reference");
204-
205-
if (Reference != null && !isProxyReference)
206-
{
207-
if (!writer.GetSettings().ShouldInlineReference(Reference))
208-
{
209-
callback(writer, Reference);
210-
return;
211-
}
212-
else
213-
{
214-
target = GetEffective(Reference.HostDocument);
215-
}
216-
}
217203
action(writer, target);
218204
}
219205

@@ -312,26 +298,11 @@ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, O
312298
/// <summary>
313299
/// Serialize <see cref="OpenApiParameter"/> to Open Api v2.0
314300
/// </summary>
315-
public void SerializeAsV2(IOpenApiWriter writer)
301+
public virtual void SerializeAsV2(IOpenApiWriter writer)
316302
{
317303
Utils.CheckArgumentNull(writer);;
318304

319305
var target = this;
320-
var isProxyReference = target.GetType().Name.Contains("Reference");
321-
322-
if (Reference != null && !isProxyReference)
323-
{
324-
if (!writer.GetSettings().ShouldInlineReference(Reference))
325-
{
326-
Reference.SerializeAsV2(writer);
327-
return;
328-
}
329-
else
330-
{
331-
target = this.GetEffective(Reference.HostDocument);
332-
}
333-
}
334-
335306
target.SerializeAsV2WithoutReference(writer);
336307
}
337308

src/Microsoft.OpenApi/Models/OpenApiPathItem.cs

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models
1212
/// <summary>
1313
/// Path Item Object: to describe the operations available on a single path.
1414
/// </summary>
15-
public class OpenApiPathItem : IOpenApiExtensible, IOpenApiReferenceable, IEffective<OpenApiPathItem>
15+
public class OpenApiPathItem : IOpenApiExtensible, IOpenApiReferenceable
1616
{
1717
/// <summary>
1818
/// An optional, string summary, intended to apply to all operations in this path.
@@ -112,63 +112,17 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
112112
{
113113
Utils.CheckArgumentNull(writer);;
114114
var target = this;
115-
var isProxyReference = target.GetType().Name.Contains("Reference");
116-
117-
if (Reference != null && !isProxyReference)
118-
{
119-
if (!writer.GetSettings().ShouldInlineReference(Reference))
120-
{
121-
callback(writer, Reference);
122-
return;
123-
}
124-
else
125-
{
126-
target = GetEffective(Reference.HostDocument);
127-
}
128-
}
129115
action(writer, target);
130116
}
131117

132-
/// <summary>
133-
/// Returns an effective OpenApiPathItem object based on the presence of a $ref
134-
/// </summary>
135-
/// <param name="doc">The host OpenApiDocument that contains the reference.</param>
136-
/// <returns>OpenApiPathItem</returns>
137-
public OpenApiPathItem GetEffective(OpenApiDocument doc)
138-
{
139-
if (Reference != null)
140-
{
141-
return doc.ResolveReferenceTo<OpenApiPathItem>(Reference);
142-
}
143-
else
144-
{
145-
return this;
146-
}
147-
}
148-
149118
/// <summary>
150119
/// Serialize <see cref="OpenApiPathItem"/> to Open Api v2.0
151120
/// </summary>
152-
public void SerializeAsV2(IOpenApiWriter writer)
121+
public virtual void SerializeAsV2(IOpenApiWriter writer)
153122
{
154123
Utils.CheckArgumentNull(writer);;
155124

156125
var target = this;
157-
var isProxyReference = target.GetType().Name.Contains("Reference");
158-
159-
if (Reference != null && !isProxyReference)
160-
{
161-
if (!writer.GetSettings().ShouldInlineReference(Reference))
162-
{
163-
Reference.SerializeAsV2(writer);
164-
return;
165-
}
166-
else
167-
{
168-
target = GetEffective(Reference.HostDocument);
169-
}
170-
}
171-
172126
target.SerializeAsV2WithoutReference(writer);
173127
}
174128

src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Microsoft.OpenApi.Models
1414
/// <summary>
1515
/// Request Body Object
1616
/// </summary>
17-
public class OpenApiRequestBody : IOpenApiReferenceable, IOpenApiExtensible, IEffective<OpenApiRequestBody>
17+
public class OpenApiRequestBody : IOpenApiReferenceable, IOpenApiExtensible
1818
{
1919
/// <summary>
2020
/// Indicates if object is populated with data or is just a reference to the data
@@ -90,20 +90,6 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
9090
Utils.CheckArgumentNull(writer);;
9191

9292
var target = this;
93-
var isProxyReference = target.GetType().Name.Contains("Reference");
94-
95-
if (Reference != null && !isProxyReference)
96-
{
97-
if (!writer.GetSettings().ShouldInlineReference(Reference))
98-
{
99-
callback(writer, Reference);
100-
return;
101-
}
102-
else
103-
{
104-
target = GetEffective(Reference.HostDocument);
105-
}
106-
}
10793
action(writer, target);
10894
}
10995

0 commit comments

Comments
 (0)