|
// 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 System;
using System.Linq;
using Mono.Cecil;
using Mono.Collections.Generic;
namespace Mono.Linker
{
/// <summary>
/// This attribute name will be the name hardcoded in trimming which will remove all
/// attribute usages but not the attribute definition
/// </summary>
[AttributeUsage(
AttributeTargets.Class, Inherited = false)]
public sealed class RemoveAttributeInstancesAttribute : Attribute
{
public RemoveAttributeInstancesAttribute(Collection<CustomAttributeArgument> args)
{
if (args.Count == 0)
{
Arguments = Array.Empty<CustomAttributeArgument>();
return;
}
var arg = args[0];
if (arg.Value is CustomAttributeArgument[] innerArgs)
Arguments = innerArgs.Select(arg => (CustomAttributeArgument)arg.Value).ToArray();
else
Arguments = new CustomAttributeArgument[] { (CustomAttributeArgument)arg.Value };
}
public CustomAttributeArgument[] Arguments { get; }
// This might be also useful to add later
// public bool ExactArgumentsOnly { get; set; }
}
}
|