File: Linker.Dataflow\ParameterProxy.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;
using Mono.Linker;
 
namespace ILLink.Shared.TypeSystemProxy
{
	internal partial struct ParameterProxy
	{
		public partial ReferenceKind GetReferenceKind ()
		{
			if (IsImplicitThis)
				return Method.Method.DeclaringType.IsValueType ? ReferenceKind.Ref : ReferenceKind.None;
#pragma warning disable RS0030 // MethodReference.Parameters is banned -- this class provides wrappers to use
			var param = Method.Method.Parameters[MetadataIndex];
#pragma warning restore RS0030 // Do not used banned APIs
			if (!param.ParameterType.IsByReference)
				return ReferenceKind.None;
			if (param.IsIn)
				return ReferenceKind.In;
			if (param.IsOut)
				return ReferenceKind.Out;
			return ReferenceKind.Ref;
		}
 
		public TypeReference ParameterType {
			get {
				if (IsImplicitThis)
					return Method.Method.DeclaringType;
#pragma warning disable RS0030 // MethodReference.Parameters is banned -- this class provides wrappers to use
				var method = Method.Method;
				var genericInstance = method as IGenericInstance ?? method.DeclaringType as IGenericInstance;
				return method.Parameters[MetadataIndex].ParameterType.InflateFrom (genericInstance);
#pragma warning restore RS0030 // Do not use banned APIs
			}
		}
 
#pragma warning disable RS0030 // MethodReference.Parameters is banned -- this class provides wrappers to use
		public partial string GetDisplayName () => IsImplicitThis ? "this"
			: !string.IsNullOrEmpty (Method.Definition.Parameters[MetadataIndex].Name) ? Method.Definition.Parameters[MetadataIndex].Name
			: $"#{Index}";
#pragma warning restore RS0030 // Do not used banned APIs
 
		public ICustomAttributeProvider GetCustomAttributeProvider ()
		{
			if (IsImplicitThis)
				return Method.Definition;
#pragma warning disable RS0030 // MethodReference.Parameters is banned -- this class provides wrappers to use
			return Method.Method.Parameters[MetadataIndex];
#pragma warning restore RS0030 // Do not used banned APIs
		}
 
		public partial bool IsTypeOf (string typeName) => ParameterType.IsTypeOf (typeName);
 
		public bool IsTypeOf (WellKnownType type) => ParameterType.IsTypeOf (type);
	}
}