Skip to content

Commit 5b006b2

Browse files
committed
Add obsoletion attributes and fix CloneFromCopyConstructor
1 parent a0b6f9d commit 5b006b2

File tree

10 files changed

+22
-14
lines changed

10 files changed

+22
-14
lines changed

src/Microsoft.OpenApi/Any/OpenApiAnyCloneHelper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
45
using System.Diagnostics.CodeAnalysis;
56

67
namespace Microsoft.OpenApi.Any
@@ -15,6 +16,7 @@ public class OpenApiAnyCloneHelper
1516
/// </summary>
1617
/// <param name="obj">The object instance.</param>
1718
/// <returns>A clone copy or the object itself.</returns>
19+
[Obsolete("Use native AoT-friendly generic overload of CloneFromCopyConstructor instead.")]
1820
public static IOpenApiAny CloneFromCopyConstructor(IOpenApiAny obj)
1921
{
2022
if (obj != null)

src/Microsoft.OpenApi/Extensions/EnumExtensions.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public static T GetAttributeOfType<T>(this Enum enumValue) where T : Attribute
3838
/// Use <see cref="DisplayAttribute"/> if exists.
3939
/// Otherwise, use the standard string representation.
4040
/// </returns>
41+
[Obsolete("Use native AoT-friendly type-specific overloads GetDisplayName methods instead.")]
4142
public static string GetDisplayName(this Enum enumValue)
4243
{
4344
var attribute = enumValue.GetAttributeOfType<DisplayAttribute>();
@@ -58,21 +59,21 @@ public static string GetDisplayName(this Enum enumValue)
5859
ParameterStyle.SpaceDelimited => "spaceDelimited",
5960
ParameterStyle.PipeDelimited => "pipeDelimited",
6061
ParameterStyle.DeepObject => "deepObject",
61-
_ => parameterStyle.ToString()
62+
_ => throw new InvalidOperationException($"Unknown parameter style: {parameterStyle}")
6263
};
6364

6465
/// <summary>
6566
/// Gets the enum display for name <see cref="ParameterLocation" /> without the use of reflection.
6667
/// </summary>
6768
/// <param name="parameterLocation">The enum value.</param>
6869
/// <returns>The display string to use.</returns>
69-
internal static string GetDisplayName(this ParameterLocation parameterLocation) => parameterLocation switch
70+
public static string GetDisplayName(this ParameterLocation parameterLocation) => parameterLocation switch
7071
{
7172
ParameterLocation.Query => "query",
7273
ParameterLocation.Header => "header",
7374
ParameterLocation.Path => "path",
7475
ParameterLocation.Cookie => "cookie",
75-
_ => parameterLocation.ToString()
76+
_ => throw new InvalidOperationException($"Unknown parameter location: {parameterLocation}")
7677
};
7778

7879
/// <summary>
@@ -92,7 +93,7 @@ public static string GetDisplayName(this Enum enumValue)
9293
ReferenceType.Link => "links",
9394
ReferenceType.Callback => "callbacks",
9495
ReferenceType.Tag => "tags",
95-
_ => referenceType.ToString()
96+
_ => throw new InvalidOperationException($"Unknown reference type: {referenceType}")
9697
};
9798

9899
/// <summary>
@@ -110,7 +111,7 @@ public static string GetDisplayName(this Enum enumValue)
110111
OperationType.Head => "head",
111112
OperationType.Patch => "patch",
112113
OperationType.Trace => "trace",
113-
_ => operationType.ToString()
114+
_ => throw new InvalidOperationException($"Unknown operation type: {operationType}")
114115
};
115116

116117
/// <summary>
@@ -124,7 +125,7 @@ public static string GetDisplayName(this Enum enumValue)
124125
SecuritySchemeType.Http => "http",
125126
SecuritySchemeType.OAuth2 => "oauth2",
126127
SecuritySchemeType.OpenIdConnect => "openIdConnect",
127-
_ => securitySchemeType.ToString()
128+
_ => throw new InvalidOperationException($"Unknown security scheme type: {securitySchemeType}")
128129
};
129130
}
130131
}

src/Microsoft.OpenApi/Models/OpenApiExample.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public OpenApiExample(OpenApiExample example)
6666
{
6767
Summary = example?.Summary ?? Summary;
6868
Description = example?.Description ?? Description;
69-
Value = OpenApiAnyCloneHelper.CloneFromCopyConstructor(example?.Value);
69+
Value = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(example?.Value);
7070
ExternalValue = example?.ExternalValue ?? ExternalValue;
7171
Extensions = example?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(example.Extensions) : null;
7272
Reference = example?.Reference != null ? new(example?.Reference) : null;

src/Microsoft.OpenApi/Models/OpenApiHeader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public OpenApiHeader(OpenApiHeader header)
106106
Explode = header?.Explode ?? Explode;
107107
AllowReserved = header?.AllowReserved ?? AllowReserved;
108108
Schema = header?.Schema != null ? new(header?.Schema) : null;
109-
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(header?.Example);
109+
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(header?.Example);
110110
Examples = header?.Examples != null ? new Dictionary<string, OpenApiExample>(header.Examples) : null;
111111
Content = header?.Content != null ? new Dictionary<string, OpenApiMediaType>(header.Content) : null;
112112
Extensions = header?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(header.Extensions) : null;

src/Microsoft.OpenApi/Models/OpenApiMediaType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public OpenApiMediaType() {}
5454
public OpenApiMediaType(OpenApiMediaType mediaType)
5555
{
5656
Schema = mediaType?.Schema != null ? new(mediaType?.Schema) : null;
57-
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(mediaType?.Example);
57+
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(mediaType?.Example);
5858
Examples = mediaType?.Examples != null ? new Dictionary<string, OpenApiExample>(mediaType.Examples) : null;
5959
Encoding = mediaType?.Encoding != null ? new Dictionary<string, OpenApiEncoding>(mediaType.Encoding) : null;
6060
Extensions = mediaType?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(mediaType.Extensions) : null;

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public OpenApiParameter(OpenApiParameter parameter)
166166
AllowReserved = parameter?.AllowReserved ?? AllowReserved;
167167
Schema = parameter?.Schema != null ? new(parameter?.Schema) : null;
168168
Examples = parameter?.Examples != null ? new Dictionary<string, OpenApiExample>(parameter.Examples) : null;
169-
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(parameter?.Example);
169+
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(parameter?.Example);
170170
Content = parameter?.Content != null ? new Dictionary<string, OpenApiMediaType>(parameter.Content) : null;
171171
Extensions = parameter?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(parameter.Extensions) : null;
172172
AllowEmptyValue = parameter?.AllowEmptyValue ?? AllowEmptyValue;

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ public OpenApiSchema(OpenApiSchema schema)
263263
MinLength = schema?.MinLength ?? MinLength;
264264
Pattern = schema?.Pattern ?? Pattern;
265265
MultipleOf = schema?.MultipleOf ?? MultipleOf;
266-
Default = OpenApiAnyCloneHelper.CloneFromCopyConstructor(schema?.Default);
266+
Default = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(schema?.Default);
267267
ReadOnly = schema?.ReadOnly ?? ReadOnly;
268268
WriteOnly = schema?.WriteOnly ?? WriteOnly;
269269
AllOf = schema?.AllOf != null ? new List<OpenApiSchema>(schema.AllOf) : null;
@@ -281,7 +281,7 @@ public OpenApiSchema(OpenApiSchema schema)
281281
AdditionalPropertiesAllowed = schema?.AdditionalPropertiesAllowed ?? AdditionalPropertiesAllowed;
282282
AdditionalProperties = schema?.AdditionalProperties != null ? new(schema?.AdditionalProperties) : null;
283283
Discriminator = schema?.Discriminator != null ? new(schema?.Discriminator) : null;
284-
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(schema?.Example);
284+
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(schema?.Example);
285285
Enum = schema?.Enum != null ? new List<IOpenApiAny>(schema.Enum) : null;
286286
Nullable = schema?.Nullable ?? Nullable;
287287
ExternalDocs = schema?.ExternalDocs != null ? new(schema?.ExternalDocs) : null;

src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public RuntimeExpressionAnyWrapper() {}
2626
/// </summary>
2727
public RuntimeExpressionAnyWrapper(RuntimeExpressionAnyWrapper runtimeExpressionAnyWrapper)
2828
{
29-
Any = OpenApiAnyCloneHelper.CloneFromCopyConstructor(runtimeExpressionAnyWrapper?.Any);
29+
Any = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(runtimeExpressionAnyWrapper?.Any);
3030
Expression = runtimeExpressionAnyWrapper?.Expression;
3131
}
3232

test/Microsoft.OpenApi.Tests/Attributes/DisplayAttributeTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ public class DisplayAttributeTests
2222
[InlineData(ApiLevel.Corporate, "corporate")]
2323
public void GetDisplayNameExtensionShouldUseDisplayAttribute(ApiLevel apiLevel, string expected)
2424
{
25-
Assert.Equal(expected, apiLevel.GetDisplayName());
25+
#pragma warning disable CS0618 // Type or member is obsolete, testing obsolete behavior
26+
Assert.Equal(expected, apiLevel.GetDisplayName());
27+
#pragma warning restore CS0618 // Type or member is obsolete, testing obsolete behavior
2628
}
2729
}
2830
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ namespace Microsoft.OpenApi.Any
2222
public class OpenApiAnyCloneHelper
2323
{
2424
public OpenApiAnyCloneHelper() { }
25+
[System.Obsolete("Use native AoT-friendly generic overload of CloneFromCopyConstructor instead.")]
2526
public static Microsoft.OpenApi.Any.IOpenApiAny CloneFromCopyConstructor(Microsoft.OpenApi.Any.IOpenApiAny obj) { }
2627
public static Microsoft.OpenApi.Any.IOpenApiAny CloneFromCopyConstructor<T>(T obj)
2728
where T : Microsoft.OpenApi.Any.IOpenApiAny { }
@@ -250,6 +251,8 @@ namespace Microsoft.OpenApi.Extensions
250251
{
251252
public static T GetAttributeOfType<T>(this System.Enum enumValue)
252253
where T : System.Attribute { }
254+
public static string GetDisplayName(this Microsoft.OpenApi.Models.ParameterLocation parameterLocation) { }
255+
[System.Obsolete("Use native AoT-friendly type-specific overloads GetDisplayName methods instead.")]
253256
public static string GetDisplayName(this System.Enum enumValue) { }
254257
}
255258
public static class OpenApiElementExtensions

0 commit comments

Comments
 (0)