Skip to content

Commit 1a2877f

Browse files
Merge pull request #1717 from captainsafia/safia/trimmable
Make OpenAPI.NET library trim-compatible
2 parents 0646b23 + 321e20d commit 1a2877f

20 files changed

+590
-27
lines changed

Microsoft.OpenApi.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.OpenApi.Hidi", "s
3030
EndProject
3131
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.OpenApi.Hidi.Tests", "test\Microsoft.OpenApi.Hidi.Tests\Microsoft.OpenApi.Hidi.Tests.csproj", "{D8F799DD-04AC-4A13-B344-45A5B944450A}"
3232
EndProject
33+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.OpenApi.Trimming.Tests", "test\Microsoft.OpenApi.Trimming.Tests\Microsoft.OpenApi.Trimming.Tests.csproj", "{1D2E0C6E-B103-4CB6-912E-D56FA1501296}"
34+
EndProject
3335
Global
3436
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3537
Debug|Any CPU = Debug|Any CPU
@@ -68,6 +70,10 @@ Global
6870
{D8F799DD-04AC-4A13-B344-45A5B944450A}.Debug|Any CPU.Build.0 = Debug|Any CPU
6971
{D8F799DD-04AC-4A13-B344-45A5B944450A}.Release|Any CPU.ActiveCfg = Release|Any CPU
7072
{D8F799DD-04AC-4A13-B344-45A5B944450A}.Release|Any CPU.Build.0 = Release|Any CPU
73+
{1D2E0C6E-B103-4CB6-912E-D56FA1501296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
74+
{1D2E0C6E-B103-4CB6-912E-D56FA1501296}.Debug|Any CPU.Build.0 = Debug|Any CPU
75+
{1D2E0C6E-B103-4CB6-912E-D56FA1501296}.Release|Any CPU.ActiveCfg = Release|Any CPU
76+
{1D2E0C6E-B103-4CB6-912E-D56FA1501296}.Release|Any CPU.Build.0 = Release|Any CPU
7177
EndGlobalSection
7278
GlobalSection(SolutionProperties) = preSolution
7379
HideSolutionNode = FALSE
@@ -81,6 +87,7 @@ Global
8187
{AD79B61D-88CF-497C-9ED5-41AE3867C5AC} = {6357D7FD-2DE4-4900-ADB9-ABC37052040A}
8288
{254841B5-7DAC-4D1D-A9C5-44FE5CE467BE} = {E546B92F-20A8-49C3-8323-4B25BB78F3E1}
8389
{D8F799DD-04AC-4A13-B344-45A5B944450A} = {6357D7FD-2DE4-4900-ADB9-ABC37052040A}
90+
{1D2E0C6E-B103-4CB6-912E-D56FA1501296} = {6357D7FD-2DE4-4900-ADB9-ABC37052040A}
8491
EndGlobalSection
8592
GlobalSection(ExtensibilityGlobals) = postSolution
8693
SolutionGuid = {9F171EFC-0DB5-4B10-ABFA-AF48D52CC565}

src/Microsoft.OpenApi/Any/OpenApiAnyCloneHelper.cs

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

4+
using System;
5+
using System.Diagnostics.CodeAnalysis;
6+
47
namespace Microsoft.OpenApi.Any
58
{
69
/// <summary>
@@ -13,6 +16,8 @@ public class OpenApiAnyCloneHelper
1316
/// </summary>
1417
/// <param name="obj">The object instance.</param>
1518
/// <returns>A clone copy or the object itself.</returns>
19+
[Obsolete("Use native AoT-friendly generic overload of CloneFromCopyConstructor instead.")]
20+
[RequiresUnreferencedCode("CloneFromCopyConstructor is not trim-compatible. Recommended to use native AoT-friendly type-specific overloads of CloneFromCopyConstructor instead.")]
1621
public static IOpenApiAny CloneFromCopyConstructor(IOpenApiAny obj)
1722
{
1823
if (obj != null)
@@ -30,5 +35,27 @@ public static IOpenApiAny CloneFromCopyConstructor(IOpenApiAny obj)
3035

3136
return obj;
3237
}
38+
39+
/// <summary>
40+
/// Clones an instance of <see cref="IOpenApiAny"/> object from the copy constructor
41+
/// </summary>
42+
/// <param name="obj">The object instance.</param>
43+
/// <returns>A clone copy or the object itself.</returns>
44+
public static T CloneFromCopyConstructor<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T>(T obj) where T : IOpenApiAny
45+
{
46+
if (obj != null)
47+
{
48+
foreach (var ci in typeof(T).GetConstructors())
49+
{
50+
var pi = ci.GetParameters();
51+
if (pi.Length == 1 && pi[0].ParameterType == typeof(T))
52+
{
53+
return (T)ci.Invoke([obj]);
54+
}
55+
}
56+
}
57+
58+
return obj;
59+
}
3360
}
3461
}

src/Microsoft.OpenApi/Any/OpenApiArray.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public OpenApiArray(OpenApiArray array)
2929
AnyType = array.AnyType;
3030
foreach (var item in array)
3131
{
32-
Add(OpenApiAnyCloneHelper.CloneFromCopyConstructor(item));
32+
Add(OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(item));
3333
}
3434
}
3535

src/Microsoft.OpenApi/Any/OpenApiObject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public OpenApiObject(OpenApiObject obj)
2929
AnyType = obj.AnyType;
3030
foreach (var key in obj.Keys)
3131
{
32-
this[key] = OpenApiAnyCloneHelper.CloneFromCopyConstructor(obj[key]);
32+
this[key] = OpenApiAnyCloneHelper.CloneFromCopyConstructor<IOpenApiAny>(obj[key]);
3333
}
3434
}
3535

0 commit comments

Comments
 (0)