forked from dotnet/runtime
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add RequiresUnreferencedCodeAttribute
This attribute is used by the linker to know which methods are unsafe to use when an application is trimmed. Fix dotnet#33862
- Loading branch information
Showing
6 changed files
with
86 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
....Private.CoreLib/src/System/Diagnostics/CodeAnalysis/RequiresUnreferencedCodeAttribute.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
// See the LICENSE file in the project root for more information. | ||
|
||
namespace System.Diagnostics.CodeAnalysis | ||
{ | ||
/// <summary> | ||
/// Indicates that the specified method requires dynamic access to code that is not referenced | ||
/// statically, for example through <see cref="System.Reflection"/>. | ||
/// </summary> | ||
/// <remarks> | ||
/// This allows tools to understand which methods are unsafe to call when removing unreferenced | ||
/// code from an application. | ||
/// </remarks> | ||
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, Inherited = false)] | ||
public sealed class RequiresUnreferencedCodeAttribute : Attribute | ||
{ | ||
/// <summary> | ||
/// Initializes a new instance of the <see cref="RequiresUnreferencedCodeAttribute"/> class | ||
/// with the specified message. | ||
/// </summary> | ||
/// <param name="message"> | ||
/// A message that contains information about the usage of unreferenced code. | ||
/// </param> | ||
public RequiresUnreferencedCodeAttribute(string message) | ||
{ | ||
Message = message; | ||
} | ||
|
||
/// <summary> | ||
/// Gets a message that contains information about the usage of unreferenced code. | ||
/// </summary> | ||
public string Message { get; } | ||
|
||
/// <summary> | ||
/// Gets or sets an optional URL that contains more information about the method, | ||
/// why it requries unreferenced code, and what options a consumer has to deal with it. | ||
/// </summary> | ||
public string? Url { get; set; } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
...m.Runtime/tests/System/Diagnostics/CodeAnalysis/RequiresUnreferencedCodeAttributeTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
// See the LICENSE file in the project root for more information. | ||
|
||
using Xunit; | ||
|
||
namespace System.Diagnostics.CodeAnalysis.Tests | ||
{ | ||
public class RequiresUnreferencedCodeAttributeTests | ||
{ | ||
[Fact] | ||
public void TestConstructor() | ||
{ | ||
var attr = new RequiresUnreferencedCodeAttribute("User Message"); | ||
|
||
Assert.Equal("User Message", attr.Message); | ||
Assert.Null(attr.Url); | ||
} | ||
|
||
[Theory] | ||
[InlineData("https://dot.net")] | ||
[InlineData("")] | ||
[InlineData(null)] | ||
public void TestSetUrl(string url) | ||
{ | ||
var attr = new RequiresUnreferencedCodeAttribute("User Message") | ||
{ | ||
Url = url | ||
}; | ||
|
||
Assert.Equal("User Message", attr.Message); | ||
Assert.Equal(url, attr.Url); | ||
} | ||
} | ||
} |