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);
		}
	}
}