示例#1
0
        public override object[] GetCustomAttributes(Type attributeType, bool inherit)
        {
            if (attributeType == null)
            {
                throw new ArgumentNullException(nameof(attributeType));
            }

            if (MdToken.IsNullToken(m_tkParamDef))
            {
                return(Array.Empty <object>());
            }

            RuntimeType?attributeRuntimeType = attributeType.UnderlyingSystemType as RuntimeType;

            if (attributeRuntimeType == null)
            {
                throw new ArgumentException(SR.Arg_MustBeType, nameof(attributeType));
            }

            return(CustomAttribute.GetCustomAttributes(this, attributeRuntimeType));
        }
        public override bool IsDefined(Type attributeType, bool inherit)
        {
            if (attributeType == null)
            {
                throw new ArgumentNullException(nameof(attributeType));
            }

            if (MdToken.IsNullToken(m_tkParamDef))
            {
                return(false);
            }

            RuntimeType attributeRuntimeType = attributeType.UnderlyingSystemType as RuntimeType;

            if (attributeRuntimeType == null)
            {
                throw new ArgumentException(SR.Arg_MustBeType, nameof(attributeType));
            }

            return(CustomAttribute.IsDefined(this, attributeRuntimeType));
        }
示例#3
0
 public override unsafe MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     System.Reflection.MetadataToken metadataToken1 = new System.Reflection.MetadataToken(metadataToken);
     if (!this.MetadataImport.IsValidToken((int)metadataToken1))
     {
         throw new ArgumentOutOfRangeException("metadataToken", Environment.GetResourceString("Argument_InvalidToken", (object)metadataToken1, (object)this));
     }
     RuntimeTypeHandle[] typeHandleArray1 = RuntimeModule.ConvertToTypeHandleArray(genericTypeArguments);
     RuntimeTypeHandle[] typeHandleArray2 = RuntimeModule.ConvertToTypeHandleArray(genericMethodArguments);
     try
     {
         if (!metadataToken1.IsMethodDef && !metadataToken1.IsMethodSpec)
         {
             if (!metadataToken1.IsMemberRef)
             {
                 throw new ArgumentException("metadataToken", Environment.GetResourceString("Argument_ResolveMethod", (object)metadataToken1, (object)this));
             }
             if ((int)*(byte *)this.MetadataImport.GetMemberRefProps((int)metadataToken1).Signature.ToPointer() == 6)
             {
                 throw new ArgumentException("metadataToken", Environment.GetResourceString("Argument_ResolveMethod", (object)metadataToken1, (object)this));
             }
         }
         IRuntimeMethodInfo runtimeMethodInfo = ModuleHandle.ResolveMethodHandleInternal(this.GetNativeHandle(), (int)metadataToken1, typeHandleArray1, typeHandleArray2);
         Type type = (Type)RuntimeMethodHandle.GetDeclaringType(runtimeMethodInfo);
         if (type.IsGenericType || type.IsArray)
         {
             System.Reflection.MetadataToken metadataToken2 = new System.Reflection.MetadataToken(this.MetadataImport.GetParentToken((int)metadataToken1));
             if (metadataToken1.IsMethodSpec)
             {
                 metadataToken2 = new System.Reflection.MetadataToken(this.MetadataImport.GetParentToken((int)metadataToken2));
             }
             type = this.ResolveType((int)metadataToken2, genericTypeArguments, genericMethodArguments);
         }
         return(RuntimeType.GetMethodBase(type as RuntimeType, runtimeMethodInfo));
     }
     catch (BadImageFormatException ex)
     {
         throw new ArgumentException(Environment.GetResourceString("Argument_BadImageFormatExceptionResolve"), (Exception)ex);
     }
 }
示例#4
0
        [System.Security.SecuritySafeCritical]  // auto-generated
        public override bool IsDefined(Type attributeType, bool inherit)
        {
            if (attributeType == null)
            {
                throw new ArgumentNullException("attributeType");
            }
            Contract.EndContractBlock();

            if (MdToken.IsNullToken(m_tkParamDef))
            {
                return(false);
            }

            RuntimeType attributeRuntimeType = attributeType.UnderlyingSystemType as RuntimeType;

            if (attributeRuntimeType == null)
            {
                throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "attributeType");
            }

            return(CustomAttribute.IsDefined(this, attributeRuntimeType));
        }
示例#5
0
        public override Object[] GetCustomAttributes(Type attributeType, bool inherit)
        {
            if (attributeType == null)
            {
                throw new ArgumentNullException(nameof(attributeType));
            }
            Contract.EndContractBlock();

            if (MdToken.IsNullToken(m_tkParamDef))
            {
                return(EmptyArray <Object> .Value);
            }

            RuntimeType attributeRuntimeType = attributeType.UnderlyingSystemType as RuntimeType;

            if (attributeRuntimeType == null)
            {
                throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), nameof(attributeType));
            }

            return(CustomAttribute.GetCustomAttributes(this, attributeRuntimeType));
        }
示例#6
0
        private RuntimeParameterInfo(RuntimeParameterInfo accessor, MemberInfo member)
        {
            // Change ownership
            MemberImpl = member;

            // The original owner should always be a method, because this method is only used to
            // change the owner from a method to a property.
            m_originalMember = accessor.MemberImpl as MethodBase;
            Contract.Assert(m_originalMember != null);

            // Populate all the caches -- we inherit this behavior from RTM
            NameImpl       = accessor.Name;
            m_nameIsCached = true;
            ClassImpl      = accessor.ParameterType;
            PositionImpl   = accessor.Position;
            AttrsImpl      = accessor.Attributes;

            // Strictly speeking, property's don't contain paramter tokens
            // However we need this to make ca's work... oh well...
            m_tkParamDef = MdToken.IsNullToken(accessor.MetadataToken) ? (int)MetadataTokenType.ParamDef : accessor.MetadataToken;
            m_scope      = accessor.m_scope;
        }
示例#7
0
 public override unsafe MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     System.Reflection.MetadataToken metadataToken1 = new System.Reflection.MetadataToken(metadataToken);
     if (metadataToken1.IsProperty)
     {
         throw new ArgumentException(Environment.GetResourceString("InvalidOperation_PropertyInfoNotAvailable"));
     }
     if (metadataToken1.IsEvent)
     {
         throw new ArgumentException(Environment.GetResourceString("InvalidOperation_EventInfoNotAvailable"));
     }
     if (metadataToken1.IsMethodSpec || metadataToken1.IsMethodDef)
     {
         return((MemberInfo)this.ResolveMethod(metadataToken, genericTypeArguments, genericMethodArguments));
     }
     if (metadataToken1.IsFieldDef)
     {
         return((MemberInfo)this.ResolveField(metadataToken, genericTypeArguments, genericMethodArguments));
     }
     if (metadataToken1.IsTypeRef || metadataToken1.IsTypeDef || metadataToken1.IsTypeSpec)
     {
         return((MemberInfo)this.ResolveType(metadataToken, genericTypeArguments, genericMethodArguments));
     }
     if (metadataToken1.IsMemberRef)
     {
         if (!this.MetadataImport.IsValidToken((int)metadataToken1))
         {
             throw new ArgumentOutOfRangeException("metadataToken", Environment.GetResourceString("Argument_InvalidToken", (object)metadataToken1, (object)this));
         }
         if ((int)*(byte *)this.MetadataImport.GetMemberRefProps((int)metadataToken1).Signature.ToPointer() == 6)
         {
             return((MemberInfo)this.ResolveField((int)metadataToken1, genericTypeArguments, genericMethodArguments));
         }
         return((MemberInfo)this.ResolveMethod((int)metadataToken1, genericTypeArguments, genericMethodArguments));
     }
     throw new ArgumentException("metadataToken", Environment.GetResourceString("Argument_ResolveMember", (object)metadataToken1, (object)this));
 }
示例#8
0
 public unsafe MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (token.IsProperty)
     {
         throw new ArgumentException(Environment.GetResourceString("InvalidOperation_PropertyInfoNotAvailable"));
     }
     if (token.IsEvent)
     {
         throw new ArgumentException(Environment.GetResourceString("InvalidOperation_EventInfoNotAvailable"));
     }
     if (token.IsMethodSpec || token.IsMethodDef)
     {
         return(this.ResolveMethod(metadataToken, genericTypeArguments, genericMethodArguments));
     }
     if (token.IsFieldDef)
     {
         return(this.ResolveField(metadataToken, genericTypeArguments, genericMethodArguments));
     }
     if ((token.IsTypeRef || token.IsTypeDef) || token.IsTypeSpec)
     {
         return(this.ResolveType(metadataToken, genericTypeArguments, genericMethodArguments));
     }
     if (!token.IsMemberRef)
     {
         throw new ArgumentException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveMember", new object[] { token, this }), new object[0]));
     }
     if (!this.MetadataImport.IsValidToken((int)token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     if (*(((byte *)this.MetadataImport.GetMemberRefProps((int)token).Signature.ToPointer())) != 6)
     {
         return(this.ResolveMethod((int)token, genericTypeArguments, genericMethodArguments));
     }
     return(this.ResolveField((int)token, genericTypeArguments, genericMethodArguments));
 }
示例#9
0
        internal FieldInfo ResolveLiteralField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
        {
            FieldInfo field;

            System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
            if (!this.MetadataImport.IsValidToken((int)token))
            {
                throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
            }
            string name        = this.MetadataImport.GetName((int)token).ToString();
            int    parentToken = this.MetadataImport.GetParentToken((int)token);
            Type   type        = this.ResolveType(parentToken, genericTypeArguments, genericMethodArguments);

            type.GetFields();
            try
            {
                field = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            }
            catch
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveField"), new object[] { token, this }), "metadataToken");
            }
            return(field);
        }
示例#10
0
        private Object GetDefaultValueInternal(bool raw)
        {
            Contract.Assert(!m_noMetadata);

            if (m_noDefaultValue)
            {
                return(DBNull.Value);
            }

            object defaultValue = null;

            // Why check the parameter type only for DateTime and only for the ctor arguments?
            // No check on the parameter type is done for named args and for Decimal.

            // We should move this after MdToken.IsNullToken(m_tkParamDef) and combine it
            // with the other custom attribute logic. But will that be a breaking change?
            // For a DateTime parameter on which both an md constant and a ca constant are set,
            // which one should win?
            if (ParameterType == typeof(DateTime))
            {
                if (raw)
                {
                    CustomAttributeTypedArgument value =
                        CustomAttributeData.Filter(
                            CustomAttributeData.GetCustomAttributes(this), typeof(DateTimeConstantAttribute), 0);

                    if (value.ArgumentType != null)
                    {
                        return(new DateTime((long)value.Value));
                    }
                }
                else
                {
                    object[] dt = GetCustomAttributes(typeof(DateTimeConstantAttribute), false);
                    if (dt != null && dt.Length != 0)
                    {
                        return(((DateTimeConstantAttribute)dt[0]).Value);
                    }
                }
            }

            #region Look for a default value in metadata
            if (!MdToken.IsNullToken(m_tkParamDef))
            {
                // This will return DBNull.Value if no constant value is defined on m_tkParamDef in the metadata.
                defaultValue = MdConstant.GetValue(m_scope, m_tkParamDef, ParameterType.GetTypeHandleInternal(), raw);
            }
            #endregion

            if (defaultValue == DBNull.Value)
            {
                #region Look for a default value in the custom attributes
                if (raw)
                {
                    foreach (CustomAttributeData attr in CustomAttributeData.GetCustomAttributes(this))
                    {
                        Type attrType = attr.Constructor.DeclaringType;

                        if (attrType == typeof(DateTimeConstantAttribute))
                        {
                            defaultValue = DateTimeConstantAttribute.GetRawDateTimeConstant(attr);
                        }
                        else if (attrType == typeof(DecimalConstantAttribute))
                        {
                            defaultValue = DecimalConstantAttribute.GetRawDecimalConstant(attr);
                        }
                        else if (attrType.IsSubclassOf(s_CustomConstantAttributeType))
                        {
                            defaultValue = CustomConstantAttribute.GetRawConstant(attr);
                        }
                    }
                }
                else
                {
                    Object[] CustomAttrs = GetCustomAttributes(s_CustomConstantAttributeType, false);
                    if (CustomAttrs.Length != 0)
                    {
                        defaultValue = ((CustomConstantAttribute)CustomAttrs[0]).Value;
                    }
                    else
                    {
                        CustomAttrs = GetCustomAttributes(s_DecimalConstantAttributeType, false);
                        if (CustomAttrs.Length != 0)
                        {
                            defaultValue = ((DecimalConstantAttribute)CustomAttrs[0]).Value;
                        }
                    }
                }
                #endregion
            }

            if (defaultValue == DBNull.Value)
            {
                m_noDefaultValue = true;
            }

            return(defaultValue);
        }
示例#11
0
        [System.Security.SecurityCritical]  // auto-generated
        internal unsafe static ParameterInfo[] GetParameters(
            IRuntimeMethodInfo methodHandle, MemberInfo member, Signature sig, out ParameterInfo returnParameter, bool fetchReturnParameter)
        {
            returnParameter = null;
            int sigArgCount = sig.Arguments.Length;

            ParameterInfo[] args = fetchReturnParameter ? null : new ParameterInfo[sigArgCount];

            int tkMethodDef = RuntimeMethodHandle.GetMethodDef(methodHandle);
            int cParamDefs  = 0;

            // Not all methods have tokens. Arrays, pointers and byRef types do not have tokens as they
            // are generated on the fly by the runtime.
            if (!MdToken.IsNullToken(tkMethodDef))
            {
                MetadataImport scope = RuntimeTypeHandle.GetMetadataImport(RuntimeMethodHandle.GetDeclaringType(methodHandle));

                MetadataEnumResult tkParamDefs;
                scope.EnumParams(tkMethodDef, out tkParamDefs);

                cParamDefs = tkParamDefs.Length;

                // Not all parameters have tokens. Parameters may have no token
                // if they have no name and no attributes.
                if (cParamDefs > sigArgCount + 1 /* return type */)
                {
                    throw new BadImageFormatException(Environment.GetResourceString("BadImageFormat_ParameterSignatureMismatch"));
                }

                for (int i = 0; i < cParamDefs; i++)
                {
                    #region Populate ParameterInfos
                    ParameterAttributes attr;
                    int position, tkParamDef = tkParamDefs[i];

                    scope.GetParamDefProps(tkParamDef, out position, out attr);

                    position--;

                    if (fetchReturnParameter == true && position == -1)
                    {
                        // more than one return parameter?
                        if (returnParameter != null)
                        {
                            throw new BadImageFormatException(Environment.GetResourceString("BadImageFormat_ParameterSignatureMismatch"));
                        }

                        returnParameter = new RuntimeParameterInfo(sig, scope, tkParamDef, position, attr, member);
                    }
                    else if (fetchReturnParameter == false && position >= 0)
                    {
                        // position beyong sigArgCount?
                        if (position >= sigArgCount)
                        {
                            throw new BadImageFormatException(Environment.GetResourceString("BadImageFormat_ParameterSignatureMismatch"));
                        }

                        args[position] = new RuntimeParameterInfo(sig, scope, tkParamDef, position, attr, member);
                    }
                    #endregion
                }
            }

            // Fill in empty ParameterInfos for those without tokens
            if (fetchReturnParameter)
            {
                if (returnParameter == null)
                {
                    returnParameter = new RuntimeParameterInfo(sig, MetadataImport.EmptyImport, 0, -1, (ParameterAttributes)0, member);
                }
            }
            else
            {
                if (cParamDefs < args.Length + 1)
                {
                    for (int i = 0; i < args.Length; i++)
                    {
                        if (args[i] != null)
                        {
                            continue;
                        }

                        args[i] = new RuntimeParameterInfo(sig, MetadataImport.EmptyImport, 0, i, (ParameterAttributes)0, member);
                    }
                }
            }

            return(args);
        }
示例#12
0
 public unsafe FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     FieldInfo fieldInfo;
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     RuntimeTypeHandle[] typeInstantiationContext = ConvertToTypeHandleArray(genericTypeArguments);
     RuntimeTypeHandle[] methodInstantiationContext = ConvertToTypeHandleArray(genericMethodArguments);
     try
     {
         RuntimeFieldHandle fieldHandle = new RuntimeFieldHandle();
         if (!token.IsFieldDef)
         {
             if (!token.IsMemberRef)
             {
                 throw new ArgumentException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveField"), new object[] { token, this }));
             }
             if (*(((byte*) this.MetadataImport.GetMemberRefProps((int) token).Signature.ToPointer())) != 6)
             {
                 throw new ArgumentException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveField"), new object[] { token, this }));
             }
             fieldHandle = this.GetModuleHandle().ResolveFieldHandle((int) token, typeInstantiationContext, methodInstantiationContext);
         }
         fieldHandle = this.GetModuleHandle().ResolveFieldHandle(metadataToken, typeInstantiationContext, methodInstantiationContext);
         Type runtimeType = fieldHandle.GetApproxDeclaringType().GetRuntimeType();
         if (runtimeType.IsGenericType || runtimeType.IsArray)
         {
             int parentToken = this.GetModuleHandle().GetMetadataImport().GetParentToken(metadataToken);
             runtimeType = this.ResolveType(parentToken, genericTypeArguments, genericMethodArguments);
         }
         fieldInfo = System.RuntimeType.GetFieldInfo(runtimeType.GetTypeHandleInternal(), fieldHandle);
     }
     catch (MissingFieldException)
     {
         fieldInfo = this.ResolveLiteralField((int) token, genericTypeArguments, genericMethodArguments);
     }
     catch (BadImageFormatException exception)
     {
         throw new ArgumentException(Environment.GetResourceString("Argument_BadImageFormatExceptionResolve"), exception);
     }
     return fieldInfo;
 }
示例#13
0
 internal FieldInfo ResolveLiteralField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     FieldInfo field;
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     string name = this.MetadataImport.GetName((int) token).ToString();
     int parentToken = this.MetadataImport.GetParentToken((int) token);
     Type type = this.ResolveType(parentToken, genericTypeArguments, genericMethodArguments);
     type.GetFields();
     try
     {
         field = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
     }
     catch
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveField"), new object[] { token, this }), "metadataToken");
     }
     return field;
 }
示例#14
0
 public Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     Type type2;
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (token.IsGlobalTypeDefToken)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveModuleType"), new object[] { token }), "metadataToken");
     }
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     if ((!token.IsTypeDef && !token.IsTypeSpec) && !token.IsTypeRef)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveType"), new object[] { token, this }), "metadataToken");
     }
     RuntimeTypeHandle[] typeInstantiationContext = ConvertToTypeHandleArray(genericTypeArguments);
     RuntimeTypeHandle[] methodInstantiationContext = ConvertToTypeHandleArray(genericMethodArguments);
     try
     {
         Type runtimeType = this.GetModuleHandle().ResolveTypeHandle(metadataToken, typeInstantiationContext, methodInstantiationContext).GetRuntimeType();
         if (runtimeType == null)
         {
             throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveType"), new object[] { token, this }), "metadataToken");
         }
         type2 = runtimeType;
     }
     catch (BadImageFormatException exception)
     {
         throw new ArgumentException(Environment.GetResourceString("Argument_BadImageFormatExceptionResolve"), exception);
     }
     return type2;
 }
示例#15
0
 public string ResolveString(int metadataToken)
 {
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (!token.IsString)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Argument_ResolveString"), new object[] { metadataToken, this.ToString() }));
     }
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     string userString = this.MetadataImport.GetUserString(metadataToken);
     if (userString == null)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString("Argument_ResolveString"), new object[] { metadataToken, this.ToString() }));
     }
     return userString;
 }
示例#16
0
 public byte[] ResolveSignature(int metadataToken)
 {
     ConstArray memberRefProps;
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     if (((!token.IsMemberRef && !token.IsMethodDef) && (!token.IsTypeSpec && !token.IsSignature)) && !token.IsFieldDef)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]), "metadataToken");
     }
     if (token.IsMemberRef)
     {
         memberRefProps = this.MetadataImport.GetMemberRefProps(metadataToken);
     }
     else
     {
         memberRefProps = this.MetadataImport.GetSignatureFromToken(metadataToken);
     }
     byte[] buffer = new byte[memberRefProps.Length];
     for (int i = 0; i < memberRefProps.Length; i++)
     {
         buffer[i] = memberRefProps[i];
     }
     return buffer;
 }
示例#17
0
 public unsafe MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     MethodBase methodBase;
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     RuntimeTypeHandle[] typeInstantiationContext = ConvertToTypeHandleArray(genericTypeArguments);
     RuntimeTypeHandle[] methodInstantiationContext = ConvertToTypeHandleArray(genericMethodArguments);
     try
     {
         if (!token.IsMethodDef && !token.IsMethodSpec)
         {
             if (!token.IsMemberRef)
             {
                 throw new ArgumentException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveMethod", new object[] { token, this }), new object[0]));
             }
             if (*(((byte*) this.MetadataImport.GetMemberRefProps((int) token).Signature.ToPointer())) == 6)
             {
                 throw new ArgumentException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveMethod"), new object[] { token, this }));
             }
         }
         RuntimeMethodHandle methodHandle = this.GetModuleHandle().ResolveMethodHandle((int) token, typeInstantiationContext, methodInstantiationContext);
         Type runtimeType = methodHandle.GetDeclaringType().GetRuntimeType();
         if (runtimeType.IsGenericType || runtimeType.IsArray)
         {
             System.Reflection.MetadataToken token2 = new System.Reflection.MetadataToken(this.MetadataImport.GetParentToken((int) token));
             if (token.IsMethodSpec)
             {
                 token2 = new System.Reflection.MetadataToken(this.MetadataImport.GetParentToken((int) token2));
             }
             runtimeType = this.ResolveType((int) token2, genericTypeArguments, genericMethodArguments);
         }
         methodBase = System.RuntimeType.GetMethodBase(runtimeType.GetTypeHandleInternal(), methodHandle);
     }
     catch (BadImageFormatException exception)
     {
         throw new ArgumentException(Environment.GetResourceString("Argument_BadImageFormatExceptionResolve"), exception);
     }
     return methodBase;
 }
示例#18
0
 public unsafe MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 {
     System.Reflection.MetadataToken token = new System.Reflection.MetadataToken(metadataToken);
     if (token.IsProperty)
     {
         throw new ArgumentException(Environment.GetResourceString("InvalidOperation_PropertyInfoNotAvailable"));
     }
     if (token.IsEvent)
     {
         throw new ArgumentException(Environment.GetResourceString("InvalidOperation_EventInfoNotAvailable"));
     }
     if (token.IsMethodSpec || token.IsMethodDef)
     {
         return this.ResolveMethod(metadataToken, genericTypeArguments, genericMethodArguments);
     }
     if (token.IsFieldDef)
     {
         return this.ResolveField(metadataToken, genericTypeArguments, genericMethodArguments);
     }
     if ((token.IsTypeRef || token.IsTypeDef) || token.IsTypeSpec)
     {
         return this.ResolveType(metadataToken, genericTypeArguments, genericMethodArguments);
     }
     if (!token.IsMemberRef)
     {
         throw new ArgumentException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ResolveMember", new object[] { token, this }), new object[0]));
     }
     if (!this.MetadataImport.IsValidToken((int) token))
     {
         throw new ArgumentOutOfRangeException("metadataToken", string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidToken", new object[] { token, this }), new object[0]));
     }
     if (*(((byte*) this.MetadataImport.GetMemberRefProps((int) token).Signature.ToPointer())) != 6)
     {
         return this.ResolveMethod((int) token, genericTypeArguments, genericMethodArguments);
     }
     return this.ResolveField((int) token, genericTypeArguments, genericMethodArguments);
 }