Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTlakaelel Axayakatl Ceja <tlakaelel.ceja@microsoft.com>2021-07-27 02:25:57 +0300
committerGitHub <noreply@github.com>2021-07-27 02:25:57 +0300
commitb888d672e11588e2bbca1cd3eeaee30d53416897 (patch)
tree427e6fff0b144fbe1cd51db7f43fc203ba48eebb
parent7b1945a5390c548e26849d3ee9485d57b4a2fc88 (diff)
RAF Attribute unification (#2156)
Bump sdk version in global.json Fix new analyzer recommendations about AsSpan and Contains(char) Disable ImplicitNamespaceImports Update Microsoft.NetCore.App.Ref used by analyzer to take new Runtime attribute changes Update analyzer to not use Message as a property in RequiresAssemblyFilesAttribute Update cecil to use Microsoft.NETFramework.ReferenceAssemblies.net40 1.0.2 along with taking other cecil updates
-rw-r--r--Directory.Build.props1
m---------external/cecil0
-rw-r--r--global.json2
-rw-r--r--src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs2
-rw-r--r--src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs11
-rw-r--r--src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs17
-rw-r--r--src/linker/Linker.Steps/MarkStep.cs4
-rw-r--r--src/linker/Linker/Driver.cs4
-rw-r--r--src/linker/Linker/MethodReferenceExtensions.cs3
-rw-r--r--src/linker/Linker/TypeReferenceExtensions.cs2
-rw-r--r--src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs5
-rw-r--r--src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs2
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs48
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs2
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs25
15 files changed, 60 insertions, 68 deletions
diff --git a/Directory.Build.props b/Directory.Build.props
index d07c1d081..5d480a85c 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,6 +1,7 @@
<Project>
<PropertyGroup>
<IsReferenceAssembly Condition="'$(IsReferenceAssembly)' == '' and '$([System.IO.Path]::GetFileName($(MSBuildProjectDirectory)))' == 'ref'">true</IsReferenceAssembly>
+ <DisableImplicitNamespaceImports_DotNet>true</DisableImplicitNamespaceImports_DotNet>
</PropertyGroup>
<PropertyGroup Condition=" '$(IsReferenceAssembly)' == 'true' ">
<!-- Since .NET 5 reference assemblies are always produced -->
diff --git a/external/cecil b/external/cecil
-Subproject a27b1fb8b08d412fbed56a053a5c0872ed9dba2
+Subproject 3bef7fc7b7910f826790ebfeccb381b76a65057
diff --git a/global.json b/global.json
index df66dcd08..21becbdf6 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"tools": {
- "dotnet": "6.0.100-preview.5.21225.11",
+ "dotnet": "6.0.100-preview.7.21369.8",
"runtimes": {
"dotnet": [
"5.0.0"
diff --git a/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs b/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs
index 7837c183c..b172b7e51 100644
--- a/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs
+++ b/src/ILLink.CodeFix/RequiresAssemblyFilesCodeFixProvider.cs
@@ -36,7 +36,7 @@ namespace ILLink.CodeFix
if (string.IsNullOrEmpty (name) || HasPublicAccessibility (containingSymbol!)) {
return Array.Empty<SyntaxNode> ();
} else {
- return new[] { generator.AttributeArgument ("Message", generator.LiteralExpression ($"Calls {name}")) };
+ return new[] { generator.AttributeArgument (generator.LiteralExpression ($"Calls {name}")) };
}
}
}
diff --git a/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs b/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
index 6c9498a30..7f1967028 100644
--- a/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
+++ b/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Immutable;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using ILLink.Shared;
using Microsoft.CodeAnalysis;
@@ -116,7 +117,7 @@ namespace ILLink.RoslynAnalyzer
ImmutableArray<IMethodSymbol> staticConstructors)
{
foreach (var staticConstructor in staticConstructors) {
- if (staticConstructor.HasAttribute (RequiresAttributeName) && TryGetRequiresAttribute (staticConstructor, out AttributeData? requiresAttribute))
+ if (staticConstructor.HasAttribute (RequiresAttributeName) && TryGetRequiresAttribute (staticConstructor, out var requiresAttribute))
ReportRequiresDiagnostic (operationContext, staticConstructor, requiresAttribute);
}
}
@@ -149,7 +150,7 @@ namespace ILLink.RoslynAnalyzer
while (member is IMethodSymbol method && method.OverriddenMethod != null && SymbolEqualityComparer.Default.Equals (method.ReturnType, method.OverriddenMethod.ReturnType))
member = method.OverriddenMethod;
- if (TryGetRequiresAttribute (member, out AttributeData? requiresAttribute)) {
+ if (TryGetRequiresAttribute (member, out var requiresAttribute)) {
ReportRequiresDiagnostic (operationContext, member, requiresAttribute);
}
}
@@ -227,7 +228,7 @@ namespace ILLink.RoslynAnalyzer
/// <param name="operationContext">Analyzer operation context to be able to report the diagnostic.</param>
/// <param name="member">Information about the member that generated the diagnostic.</param>
/// <param name="requiresAttribute">Requires attribute data to print attribute arguments.</param>
- private void ReportRequiresDiagnostic (OperationAnalysisContext operationContext, ISymbol member, AttributeData? requiresAttribute)
+ private void ReportRequiresDiagnostic (OperationAnalysisContext operationContext, ISymbol member, AttributeData requiresAttribute)
{
var message = GetMessageFromAttribute (requiresAttribute);
var url = GetUrlFromAttribute (requiresAttribute);
@@ -250,7 +251,7 @@ namespace ILLink.RoslynAnalyzer
private bool HasMismatchingAttributes (ISymbol member1, ISymbol member2) => member1.HasAttribute (RequiresAttributeName) ^ member2.HasAttribute (RequiresAttributeName);
- protected abstract string GetMessageFromAttribute (AttributeData? requiresAttribute);
+ protected abstract string GetMessageFromAttribute (AttributeData requiresAttribute);
private string GetUrlFromAttribute (AttributeData? requiresAttribute)
{
@@ -264,7 +265,7 @@ namespace ILLink.RoslynAnalyzer
/// <param name="member">Symbol of the member to search attribute.</param>
/// <param name="requiresAttribute">Output variable in case of matching Requires attribute.</param>
/// <returns>True if the member contains a Requires attribute; otherwise, returns false.</returns>
- private bool TryGetRequiresAttribute (ISymbol member, out AttributeData? requiresAttribute)
+ private bool TryGetRequiresAttribute (ISymbol member, [NotNullWhen (returnValue: true)] out AttributeData? requiresAttribute)
{
requiresAttribute = null;
foreach (var _attribute in member.GetAttributes ()) {
diff --git a/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs b/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs
index a0a6aa9de..dbce10d38 100644
--- a/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs
+++ b/src/ILLink.RoslynAnalyzer/RequiresAssemblyFilesAnalyzer.cs
@@ -123,15 +123,18 @@ namespace ILLink.RoslynAnalyzer
return false;
}
- protected override bool VerifyAttributeArguments (AttributeData attribute) => attribute.ConstructorArguments.Length == 0;
+ protected override bool VerifyAttributeArguments (AttributeData attribute) => attribute.ConstructorArguments.Length == 0 ||
+ attribute.ConstructorArguments.Length >= 1 && attribute.ConstructorArguments[0] is { Type: { SpecialType: SpecialType.System_String } } ctorArg;
- protected override string GetMessageFromAttribute (AttributeData? requiresAttribute)
+ protected override string GetMessageFromAttribute (AttributeData requiresAttribute)
{
- var message = requiresAttribute?.NamedArguments.FirstOrDefault (na => na.Key == "Message").Value.Value?.ToString ();
- if (!string.IsNullOrEmpty (message))
- message = $" {message}{(message!.TrimEnd ().EndsWith (".") ? "" : ".")}";
-
- return message!;
+ string message = "";
+ if (requiresAttribute.ConstructorArguments.Length >= 1) {
+ message = requiresAttribute.ConstructorArguments[0].Value?.ToString () ?? "";
+ if (!string.IsNullOrEmpty (message))
+ message = $" {message}{(message!.TrimEnd ().EndsWith (".") ? "" : ".")}";
+ }
+ return message;
}
}
}
diff --git a/src/linker/Linker.Steps/MarkStep.cs b/src/linker/Linker.Steps/MarkStep.cs
index 39f70f622..bd4c0e61c 100644
--- a/src/linker/Linker.Steps/MarkStep.cs
+++ b/src/linker/Linker.Steps/MarkStep.cs
@@ -1052,7 +1052,7 @@ namespace Mono.Linker.Steps
bool marked = false;
int arity_marker = name.IndexOf ('`');
- if (arity_marker < 1 || !int.TryParse (name.Substring (arity_marker + 1), out int arity)) {
+ if (arity_marker < 1 || !int.TryParse (name.AsSpan (arity_marker + 1), out int arity)) {
arity = 0;
} else {
name = name.Substring (0, arity_marker);
@@ -2035,7 +2035,7 @@ namespace Mono.Linker.Steps
//
// We could implement support for this at some point, but for now it's important to make sure at least we don't crash trying to find some
// method on the current type when it exists on some other type
- if (methodName.Contains ("."))
+ if (methodName.Contains ('.'))
continue;
MethodDefinition method = GetMethodWithNoParameters (type, methodName);
diff --git a/src/linker/Linker/Driver.cs b/src/linker/Linker/Driver.cs
index 0674f479a..f65749ad6 100644
--- a/src/linker/Linker/Driver.cs
+++ b/src/linker/Linker/Driver.cs
@@ -805,7 +805,7 @@ namespace Mono.Linker
string[] values = value.Split (new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string v in values) {
var id = v.Trim ();
- if (!id.StartsWith ("IL", StringComparison.Ordinal) || !ushort.TryParse (id.Substring (2), out ushort code))
+ if (!id.StartsWith ("IL", StringComparison.Ordinal) || !ushort.TryParse (id.AsSpan (2), out ushort code))
continue;
yield return code;
@@ -884,7 +884,7 @@ namespace Mono.Linker
string customStepName;
string targetName = null;
bool before = false;
- if (!arg.Contains (":")) {
+ if (!arg.Contains (':')) {
customStepName = arg;
} else {
string[] parts = arg.Split (':');
diff --git a/src/linker/Linker/MethodReferenceExtensions.cs b/src/linker/Linker/MethodReferenceExtensions.cs
index 695ab2043..2aff0ce28 100644
--- a/src/linker/Linker/MethodReferenceExtensions.cs
+++ b/src/linker/Linker/MethodReferenceExtensions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
using Mono.Cecil;
namespace Mono.Linker
@@ -16,7 +17,7 @@ namespace Mono.Linker
var methodDefinition = method.Resolve ();
if (methodDefinition != null && (methodDefinition.IsSetter || methodDefinition.IsGetter)) {
// Append property name
- string name = methodDefinition.IsSetter ? methodDefinition.Name.Substring (4) + ".set" : methodDefinition.Name.Substring (4) + ".get";
+ string name = methodDefinition.IsSetter ? string.Concat (methodDefinition.Name.AsSpan (4), ".set") : string.Concat (methodDefinition.Name.AsSpan (4), ".get");
sb.Append (name);
// Insert declaring type name and namespace
sb.Insert (0, '.').Insert (0, method.DeclaringType.GetDisplayName ());
diff --git a/src/linker/Linker/TypeReferenceExtensions.cs b/src/linker/Linker/TypeReferenceExtensions.cs
index 5ebc3d2ae..3cec02422 100644
--- a/src/linker/Linker/TypeReferenceExtensions.cs
+++ b/src/linker/Linker/TypeReferenceExtensions.cs
@@ -100,7 +100,7 @@ namespace Mono.Linker
sb.Append (']');
}
- sb.Append (arrayType.Name.Substring (0, arrayType.Name.IndexOf ('[')));
+ sb.Append (arrayType.Name.AsSpan (0, arrayType.Name.IndexOf ('[')));
parseArrayDimensions (arrayType);
var element = arrayType.ElementType as ArrayType;
while (element != null) {
diff --git a/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs b/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs
index 33e51a028..79a462bd3 100644
--- a/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs
+++ b/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
using Mono.Cecil;
@@ -109,7 +110,7 @@ namespace Mono.Linker
if (!(attribute.ConstructorArguments[1].Value is string warningId) ||
warningId.Length < 6 ||
!warningId.StartsWith ("IL") ||
- !int.TryParse (warningId.Substring (2, 4), out info.Id)) {
+ !int.TryParse (warningId.AsSpan (2, 4), out info.Id)) {
return false;
}
diff --git a/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs b/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs
index 28bb9e586..c46fcc2c6 100644
--- a/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs
+++ b/src/tlens/TLens.Analyzers/LargeStaticArraysAnalyzer.cs
@@ -27,7 +27,7 @@ namespace TLens.Analyzers
if (!name.StartsWith ("__StaticArrayInitTypeSize="))
continue;
- if (!int.TryParse (name.Substring (26), out int size))
+ if (!int.TryParse (name.AsSpan (26), out int size))
throw new NotImplementedException (name);
methods.Add ((size, method));
diff --git a/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs b/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
index 4f66348ba..cf09be77e 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
@@ -166,7 +166,7 @@ using System.Diagnostics.CodeAnalysis;
class C
{
- [RequiresAssemblyFiles (Message = ""Message from attribute"", Url = ""https://helpurl"")]
+ [RequiresAssemblyFiles (""Message from attribute"", Url = ""https://helpurl"")]
void M1()
{
}
@@ -231,13 +231,13 @@ class C
M2();
}
- [RequiresAssemblyFiles (Message = ""Warn from M2"")]
+ [RequiresAssemblyFiles (""Warn from M2"")]
void M2()
{
M3();
}
- [RequiresAssemblyFiles (Message = ""Warn from M3"")]
+ [RequiresAssemblyFiles (""Warn from M3"")]
void M3()
{
}
@@ -321,6 +321,8 @@ class C
}
}";
return VerifyRequiresAssemblyFilesAnalyzer (src,
+ // (8,13): warning IL3002: Using member 'System.Reflection.AssemblyName.CodeBase.get' which has 'RequiresAssemblyFilesAttribute' can break functionality when embedded in a single-file app. The code will return an empty string for assemblies embedded in a single-file app.
+ VerifyCS.Diagnostic (RequiresAssemblyFilesAnalyzer.IL3002).WithSpan (8, 13, 8, 23).WithArguments ("System.Reflection.AssemblyName.CodeBase.get", " The code will return an empty string for assemblies embedded in a single-file app.", ""),
// (8,13): warning IL3000: 'System.Reflection.AssemblyName.CodeBase' always returns an empty string for assemblies embedded in a single-file app. If the path to the app directory is needed, consider calling 'System.AppContext.BaseDirectory'.
VerifyCS.Diagnostic (RequiresAssemblyFilesAnalyzer.IL3000).WithSpan (8, 13, 8, 23).WithArguments ("System.Reflection.AssemblyName.CodeBase"),
// (9,13): warning IL3000: 'System.Reflection.AssemblyName.EscapedCodeBase' always returns an empty string for assemblies embedded in a single-file app. If the path to the app directory is needed, consider calling 'System.AppContext.BaseDirectory'.
@@ -445,7 +447,7 @@ class C
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
int M2() => M1();
}
@@ -469,18 +471,18 @@ public class E
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
int M2() => M1();
}
class D
{
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
public int M3(C c) => c.M1();
public class E
{
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
public int M4(C c) => c.M1();
}
}
@@ -561,7 +563,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
int M2 => M1();
@@ -572,10 +574,10 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
- [RequiresAssemblyFiles(Message = ""Calls M1"")]
+ [RequiresAssemblyFiles(""Calls M1"")]
int M2 => M1();
}";
return VerifyRequiresAssemblyFilesCodeFix (
@@ -642,7 +644,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
Action M2()
@@ -657,13 +659,13 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
- [RequiresAssemblyFiles(Message = ""Calls Wrapper"")]
+ [RequiresAssemblyFiles(""Calls Wrapper"")]
Action M2()
{
- [global::System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute(Message = ""Calls M1"")] void Wrapper () => M1();
+ [global::System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute(""Calls M1"")] void Wrapper () => M1();
return Wrapper;
}
}";
@@ -688,7 +690,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
public C () => M1();
@@ -699,7 +701,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
[RequiresAssemblyFiles()]
@@ -724,7 +726,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
public event EventHandler E1
@@ -742,7 +744,7 @@ using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
[RequiresAssemblyFiles()]
@@ -773,7 +775,7 @@ using System.Diagnostics.CodeAnalysis;
class StaticCtor
{
- [RequiresAssemblyFiles (Message = ""Message for --TestStaticCtor--"")]
+ [RequiresAssemblyFiles (""Message for --TestStaticCtor--"")]
static StaticCtor ()
{
}
@@ -799,7 +801,7 @@ class StaticCtorTriggeredByFieldAccess
{
public static int field;
- [RequiresAssemblyFiles (Message = ""Message for --StaticCtorTriggeredByFieldAccess.Cctor--"")]
+ [RequiresAssemblyFiles (""Message for --StaticCtorTriggeredByFieldAccess.Cctor--"")]
static StaticCtorTriggeredByFieldAccess ()
{
field = 0;
@@ -826,12 +828,12 @@ using System.Diagnostics.CodeAnalysis;
class StaticCtorTriggeredByMethodCall
{
- [RequiresAssemblyFiles (Message = ""Message for --StaticCtorTriggeredByMethodCall.Cctor--"")]
+ [RequiresAssemblyFiles (""Message for --StaticCtorTriggeredByMethodCall.Cctor--"")]
static StaticCtorTriggeredByMethodCall ()
{
}
- [RequiresAssemblyFiles (Message = ""Message for --StaticCtorTriggeredByMethodCall.TriggerStaticCtorMarking--"")]
+ [RequiresAssemblyFiles (""Message for --StaticCtorTriggeredByMethodCall.TriggerStaticCtorMarking--"")]
public void TriggerStaticCtorMarking ()
{
}
diff --git a/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs b/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
index 6022d9a29..60da38b14 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
@@ -22,7 +22,7 @@ namespace ILLink.RoslynAnalyzer.Tests
public static readonly ReferenceAssemblies Net6PreviewAssemblies =
new ReferenceAssemblies (
"net6.0",
- new PackageIdentity ("Microsoft.NETCore.App.Ref", "6.0.0-preview.5.21224.4"),
+ new PackageIdentity ("Microsoft.NETCore.App.Ref", "6.0.0-preview.7.21368.2"),
Path.Combine ("ref", "net6.0"))
.WithNuGetConfigFilePath (Path.Combine (TestCaseUtils.GetRepoRoot (), "NuGet.config"));
diff --git a/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs b/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs
index 38249eb3e..05fe2ba10 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/UnconditionalSuppressMessageCodeFixTests.cs
@@ -49,26 +49,9 @@ build_property.{MSBuildPropertyOptionNames.EnableTrimAnalyzer} = true")));
DiagnosticResult[] baselineExpected,
DiagnosticResult[] fixedExpected)
{
- var attributeDefinition = @"
-namespace System.Diagnostics.CodeAnalysis
-{
-#nullable enable
- [AttributeUsage(AttributeTargets.Constructor |
- AttributeTargets.Event |
- AttributeTargets.Method |
- AttributeTargets.Property,
- Inherited = false,
- AllowMultiple = false)]
- public sealed class RequiresAssemblyFilesAttribute : Attribute
- {
- public RequiresAssemblyFilesAttribute() { }
- public string? Message { get; set; }
- public string? Url { get; set; }
- }
-}";
var test = new VerifyCSUSMwithRAF.Test {
- TestCode = source + attributeDefinition,
- FixedCode = fixedSource + attributeDefinition,
+ TestCode = source,
+ FixedCode = fixedSource,
ReferenceAssemblies = TestCaseUtils.Net6PreviewAssemblies
};
test.ExpectedDiagnostics.AddRange (baselineExpected);
@@ -117,7 +100,7 @@ public class C
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
int M2() => M1();
}";
@@ -125,7 +108,7 @@ public class C
using System.Diagnostics.CodeAnalysis;
public class C
{
- [RequiresAssemblyFiles(Message = ""message"")]
+ [RequiresAssemblyFiles(""message"")]
public int M1() => 0;
[UnconditionalSuppressMessage(""SingleFile"", ""IL3002:Avoid calling members marked with 'RequiresAssemblyFilesAttribute' when publishing as a single-file"", Justification = ""<Pending>"")]
int M2() => M1();