From 369021a5df42374c0d4703767f1807b977c502c5 Mon Sep 17 00:00:00 2001 From: Vitek Karas <10670590+vitek-karas@users.noreply.github.com> Date: Fri, 16 Sep 2022 11:31:04 -0700 Subject: Better warning message for DynamicDependency problem (#3035) * Improve warning message for DynamicDependency to include the name of the type along with the name of the member we were looking for. * Fix tests --- src/ILLink.Shared/SharedStrings.resx | 2 +- src/linker/Linker.Steps/MarkStep.cs | 4 ++-- .../DynamicDependencyMemberSignatureWildcard.cs | 3 ++- .../DynamicDependencies/DynamicDependencyMethod.cs | 10 +++++----- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/ILLink.Shared/SharedStrings.resx b/src/ILLink.Shared/SharedStrings.resx index 0330b7f05..3db202432 100644 --- a/src/ILLink.Shared/SharedStrings.resx +++ b/src/ILLink.Shared/SharedStrings.resx @@ -613,7 +613,7 @@ The member signature or DynamicallyAccessedMemberTypes in a DynamicDependencyAttribute constructor did not resolve to any members on the type. - No members were resolved for '{0}'. + No members were resolved for '{0}' on type '{1}'. The resource element in a substitution file did not have a 'name' attribute. diff --git a/src/linker/Linker.Steps/MarkStep.cs b/src/linker/Linker.Steps/MarkStep.cs index 8870075f3..dc026e7b9 100644 --- a/src/linker/Linker.Steps/MarkStep.cs +++ b/src/linker/Linker.Steps/MarkStep.cs @@ -947,14 +947,14 @@ namespace Mono.Linker.Steps if (dynamicDependency.MemberSignature is string memberSignature) { members = DocumentationSignatureParser.GetMembersByDocumentationSignature (type, memberSignature, Context, acceptName: true); if (!members.Any ()) { - Context.LogWarning (ScopeStack.CurrentScope.Origin, DiagnosticId.NoMembersResolvedForMemberSignatureOrType, memberSignature); + Context.LogWarning (ScopeStack.CurrentScope.Origin, DiagnosticId.NoMembersResolvedForMemberSignatureOrType, memberSignature, type.GetDisplayName ()); return; } } else { var memberTypes = dynamicDependency.MemberTypes; members = type.GetDynamicallyAccessedMembers (Context, memberTypes); if (!members.Any ()) { - Context.LogWarning (ScopeStack.CurrentScope.Origin, DiagnosticId.NoMembersResolvedForMemberSignatureOrType, memberTypes.ToString ()); + Context.LogWarning (ScopeStack.CurrentScope.Origin, DiagnosticId.NoMembersResolvedForMemberSignatureOrType, memberTypes.ToString (), type.GetDisplayName ()); return; } } diff --git a/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMemberSignatureWildcard.cs b/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMemberSignatureWildcard.cs index 23bd791ed..2a4bc9d15 100644 --- a/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMemberSignatureWildcard.cs +++ b/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMemberSignatureWildcard.cs @@ -6,7 +6,7 @@ using Mono.Linker.Tests.Cases.Expectations.Metadata; namespace Mono.Linker.Tests.Cases.DynamicDependencies { [SetupCompileBefore ("library.dll", new[] { "Dependencies/DynamicDependencyMethodInAssemblyLibrary.cs" })] - [LogContains ("IL2037: Mono.Linker.Tests.Cases.DynamicDependencies.DynamicDependencyMemberSignatureWildcard.Dependency(): No members were resolved for '*'.")] + [ExpectedNoWarnings] public class DynamicDependencyMemberSignatureWildcard { public static void Main () @@ -15,6 +15,7 @@ namespace Mono.Linker.Tests.Cases.DynamicDependencies } [Kept] + [ExpectedWarning ("IL2037", "'*'", "'Mono.Linker.Tests.Cases.DynamicDependencies.Dependencies.DynamicDependencyMethodInAssemblyLibrary'")] [DynamicDependency ("*", "Mono.Linker.Tests.Cases.DynamicDependencies.Dependencies.DynamicDependencyMethodInAssemblyLibrary", "library")] static void Dependency () { diff --git a/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMethod.cs b/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMethod.cs index 206c4d146..ae0812445 100644 --- a/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMethod.cs +++ b/test/Mono.Linker.Tests.Cases/DynamicDependencies/DynamicDependencyMethod.cs @@ -58,19 +58,19 @@ namespace Mono.Linker.Tests.Cases.DynamicDependencies [Kept] - [ExpectedWarning ("IL2037", "MissingMethod")] + [ExpectedWarning ("IL2037", "MissingMethod", "'Mono.Linker.Tests.Cases.DynamicDependencies.C'")] [DynamicDependency ("MissingMethod", typeof (C))] - [ExpectedWarning ("IL2037", "Dependency2``1(``0,System.Int32,System.Object)")] + [ExpectedWarning ("IL2037", "Dependency2``1(``0,System.Int32,System.Object)", "'Mono.Linker.Tests.Cases.DynamicDependencies.C'")] [DynamicDependency ("Dependency2``1(``0,System.Int32,System.Object)", typeof (C))] - [ExpectedWarning ("IL2037", "''")] + [ExpectedWarning ("IL2037", "''", "'Mono.Linker.Tests.Cases.DynamicDependencies.DynamicDependencyMethod.B'")] [DynamicDependency ("")] - [ExpectedWarning ("IL2037", "#ctor()")] + [ExpectedWarning ("IL2037", "#ctor()", "'Mono.Linker.Tests.Cases.DynamicDependencies.DynamicDependencyMethod.NestedStruct'")] [DynamicDependency ("#ctor()", typeof (NestedStruct))] - [ExpectedWarning ("IL2037", "#cctor()")] + [ExpectedWarning ("IL2037", "#cctor()", "'Mono.Linker.Tests.Cases.DynamicDependencies.C'")] [DynamicDependency ("#cctor()", typeof (C))] [ExpectedWarning ("IL2036", "NonExistentType")] -- cgit v1.2.3