| File: Linker.Dataflow\ParameterProxy.cs | Web Access |
| Project: src\runtime\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); } }