// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Runtime.General; using System.Reflection.Runtime.ParameterInfos; using System.Reflection.Runtime.TypeInfos; using System.Text; using Internal.Reflection.Core; using Internal.Reflection.Core.Execution; namespace System.Reflection.Runtime.MethodInfos { /// <summary> /// These api's are to be implemented by parsing metadata. /// </summary> /// <typeparam name="TRuntimeMethodCommon"></typeparam> internal interface IRuntimeMethodCommon<TRuntimeMethodCommon> where TRuntimeMethodCommon : IRuntimeMethodCommon<TRuntimeMethodCommon>, IEquatable<TRuntimeMethodCommon> { MethodAttributes Attributes { get; } CallingConventions CallingConvention { get; } RuntimeTypeInfo ContextTypeInfo { get; } RuntimeTypeInfo DeclaringType { get; } RuntimeNamedTypeInfo DefiningTypeInfo { get; } MethodImplAttributes MethodImplementationFlags { get; } Module Module { get; } /// <summary> /// Return an array of the types of the return value and parameter types. /// </summary> QSignatureTypeHandle[] QualifiedMethodSignature { get; } IEnumerable<CustomAttributeData> TrueCustomAttributes { get; } /// <summary> /// Parse the metadata that describes parameters, and for each parameter for which there is specific metadata /// construct a RuntimeParameterInfo and fill in the VirtualRuntimeParameterInfoArray. Do remember to use contextMethod /// instead of using the one internal to the RuntimeMethodCommon, as the runtime may pass in a subtly different context. /// </summary> void FillInMetadataDescribedParameters(ref VirtualRuntimeParameterInfoArray result, QSignatureTypeHandle[] parameterTypes, MethodBase contextMethod, TypeContext typeContext); string Name { get; } MethodBaseInvoker GetUncachedMethodInvoker(RuntimeTypeInfo[] methodArguments, MemberInfo exceptionPertainant, out Exception exception); bool IsGenericMethodDefinition { get; } int GenericParameterCount { get; } bool HasSameMetadataDefinitionAs(TRuntimeMethodCommon other); TRuntimeMethodCommon RuntimeMethodCommonOfUninstantiatedMethod { get; } RuntimeTypeInfo[] GetGenericTypeParametersWithSpecifiedOwningMethod(RuntimeNamedMethodInfo<TRuntimeMethodCommon> owningMethod); int MetadataToken { get; } /// <summary> /// Retrieves the RuntimeMethodHandle for the given method. Non-null generic args should only be passed for instantiated /// generic methods. /// </summary> RuntimeMethodHandle GetRuntimeMethodHandle(Type[] genericArgs); } } |