File: Linker.Steps\CheckSuppressionsStep.cs
Web Access
Project: src\src\tools\illink\src\linker\Mono.Linker.csproj (illink)
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
 
using Mono.Cecil;
 
namespace Mono.Linker.Steps
{
    public class CheckSuppressionsStep : BaseSubStep
    {
        public override SubStepTargets Targets
        {
            get
            {
                return SubStepTargets.Type |
                    SubStepTargets.Field |
                    SubStepTargets.Method |
                    SubStepTargets.Property |
                    SubStepTargets.Event;
            }
        }
 
        public override bool IsActiveFor(AssemblyDefinition assembly)
        {
            // Only process assemblies which went through marking.
            // The code relies on MarkStep to identify the useful suppressions.
            // Assemblies which didn't go through marking would not produce any warnings and thus would report all suppressions as redundant.
            var assemblyAction = Annotations.GetAction(assembly);
            return assemblyAction == AssemblyAction.Link || assemblyAction == AssemblyAction.Copy;
        }
 
        public override void ProcessType(TypeDefinition type)
        {
            Context.Suppressions.GatherSuppressions(type);
        }
 
        public override void ProcessField(FieldDefinition field)
        {
            Context.Suppressions.GatherSuppressions(field);
        }
 
        public override void ProcessMethod(MethodDefinition method)
        {
            if (Context.Annotations.GetAction(method) != MethodAction.ConvertToThrow)
                Context.Suppressions.GatherSuppressions(method);
        }
 
        public override void ProcessProperty(PropertyDefinition property)
        {
            Context.Suppressions.GatherSuppressions(property);
        }
 
        public override void ProcessEvent(EventDefinition @event)
        {
            Context.Suppressions.GatherSuppressions(@event);
        }
    }
}