diff --git a/src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs b/src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs index 383764e0aba9de..05f0c47812be1b 100644 --- a/src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs +++ b/src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs @@ -67,14 +67,7 @@ IEnumerable GetFailures() return s.FullName; }), StringComparer.Ordinal); - // Workaround for compiler injected attribute to describe the language version - linkedMembers.Remove("System.Void Microsoft.CodeAnalysis.EmbeddedAttribute::.ctor()"); - linkedMembers.Remove("System.Int32 System.Runtime.CompilerServices.RefSafetyRulesAttribute::Version"); - linkedMembers.Remove("System.Void System.Runtime.CompilerServices.RefSafetyRulesAttribute::.ctor(System.Int32)"); - - // Workaround for compiler injected attribute to describe the language version - verifiedGeneratedTypes.Add("Microsoft.CodeAnalysis.EmbeddedAttribute"); - verifiedGeneratedTypes.Add("System.Runtime.CompilerServices.RefSafetyRulesAttribute"); + PrepareToVerifyAssembly(originalAssembly); var membersToAssert = originalAssembly.MainModule.Types; foreach (var originalMember in membersToAssert) @@ -104,6 +97,25 @@ IEnumerable GetFailures() } } + /// + /// An opportunity to adjust what has been verified. Helpful for dealing with polyfills or compiler generated types + /// + /// + protected virtual void PrepareToVerifyAssembly(AssemblyDefinition original) + { + } + + /// + /// The type will not be verified + /// + /// + protected void IgnoreGeneratedTypeAndItsMembers(TypeDefinition type) + { + verifiedGeneratedTypes.Add(type.FullName); + foreach (var member in type.AllMembers()) + linkedMembers.Remove(member.FullName); + } + static bool IsBackingField(FieldDefinition field) => field.Name.StartsWith("<") && field.Name.EndsWith(">k__BackingField"); protected virtual IEnumerable VerifyModule(ModuleDefinition original, ModuleDefinition linked)