private void SetValue(ElementAttributeMetadata attribute, Object value) { if (attribute.IsReadOnly && !Application.IsResolvingDependencies) { throw new ElementException(ElementErrorCodes.InvalidOperation, "SetValue (" + attribute.ToString(true) + ") no puede llamarse, esta definido IsReadOnly=true."); } switch (attribute.MemberInfo.MemberType) { case MemberTypes.Field: var field = RuntimeType.GetField(attribute.MemberInfo.Name); field.SetValue(this, Cast(value, field.FieldType)); break; case MemberTypes.Property: var property = RuntimeType.GetProperty(attribute.MemberInfo.Name); if (property.GetSetMethod(true) != null) { property.SetValue(this, Cast(value, property.PropertyType), null); } break; default: throw new ElementException(ElementErrorCodes.InvalidOperation, "SetValue (" + attribute.ToString(true) + ") solo puede llamarse sobre miembros del tipo Field o Property."); } }
private FieldInfo InternalGetField(String name, BindingFlags bindingAttr) { if (RuntimeType == null) { return(null); } return(RuntimeType.GetField(name, bindingAttr)); }
public override FieldInfo GetField(String name, BindingFlags bindingAttr) { if (name == null) { throw new ArgumentNullException("name"); } if (RuntimeType == null) { return(null); } return(RuntimeType.GetField(name, bindingAttr)); }
private static unsafe object[] GetCustomAttributes(RuntimeModule decoratedModule, int decoratedMetadataToken, int pcaCount, RuntimeType attributeFilterType, bool mustBeInheritable, IList derivedAttributes, bool isDecoratedTargetSecurityTransparent) { if (decoratedModule.Assembly.ReflectionOnly) { throw new InvalidOperationException(Environment.GetResourceString("Arg_ReflectionOnlyCA")); } MetadataImport metadataImport = decoratedModule.MetadataImport; CustomAttributeRecord[] attributeRecords = CustomAttributeData.GetCustomAttributeRecords(decoratedModule, decoratedMetadataToken); Type elementType = (attributeFilterType == (RuntimeType)null || attributeFilterType.IsValueType ? 1 : (attributeFilterType.ContainsGenericParameters ? 1 : 0)) != 0 ? typeof(object) : (Type)attributeFilterType; if (attributeFilterType == (RuntimeType)null && attributeRecords.Length == 0) { return(CustomAttribute.CreateAttributeArrayHelper(elementType, 0)); } object[] attributeArrayHelper1 = CustomAttribute.CreateAttributeArrayHelper(elementType, attributeRecords.Length); int length = 0; SecurityContextFrame securityContextFrame = new SecurityContextFrame(); securityContextFrame.Push(decoratedModule.GetRuntimeAssembly()); Assembly lastAptcaOkAssembly = (Assembly)null; for (int index1 = 0; index1 < attributeRecords.Length; ++index1) { CustomAttributeRecord caRecord = attributeRecords[index1]; IRuntimeMethodInfo ctor = (IRuntimeMethodInfo)null; RuntimeType attributeType = (RuntimeType)null; int namedArgs = 0; IntPtr ptr1 = caRecord.blob.Signature; IntPtr blobEnd = (IntPtr)((void *)((IntPtr)(void *)ptr1 + caRecord.blob.Length)); int num = (int)((sbyte *)(void *)blobEnd - (sbyte *)(void *)ptr1); bool ctorHasParameters; bool isVarArg; if (CustomAttribute.FilterCustomAttributeRecord(caRecord, metadataImport, ref lastAptcaOkAssembly, decoratedModule, (MetadataToken)decoratedMetadataToken, attributeFilterType, mustBeInheritable, attributeArrayHelper1, derivedAttributes, out attributeType, out ctor, out ctorHasParameters, out isVarArg)) { if (ctor != null) { RuntimeMethodHandle.CheckLinktimeDemands(ctor, decoratedModule, isDecoratedTargetSecurityTransparent); } RuntimeConstructorInfo.CheckCanCreateInstance((Type)attributeType, isVarArg); object target; if (ctorHasParameters) { target = CustomAttribute.CreateCaObject(decoratedModule, ctor, ref ptr1, blobEnd, out namedArgs); } else { target = RuntimeTypeHandle.CreateCaInstance(attributeType, ctor); if (num == 0) { namedArgs = 0; } else { if ((int)Marshal.ReadInt16(ptr1) != 1) { throw new CustomAttributeFormatException(); } IntPtr ptr2 = (IntPtr)((void *)((IntPtr)(void *)ptr1 + 2)); namedArgs = (int)Marshal.ReadInt16(ptr2); ptr1 = (IntPtr)((void *)((IntPtr)(void *)ptr2 + 2)); } } for (int index2 = 0; index2 < namedArgs; ++index2) { IntPtr signature = caRecord.blob.Signature; string name; bool isProperty; RuntimeType type; object obj; CustomAttribute.GetPropertyOrFieldData(decoratedModule, ref ptr1, blobEnd, out name, out isProperty, out type, out obj); try { if (isProperty) { if (type == (RuntimeType)null && obj != null) { type = (RuntimeType)obj.GetType(); if (type == CustomAttribute.Type_RuntimeType) { type = CustomAttribute.Type_Type; } } RuntimePropertyInfo runtimePropertyInfo = !(type == (RuntimeType)null) ? attributeType.GetProperty(name, (Type)type, Type.EmptyTypes) as RuntimePropertyInfo : attributeType.GetProperty(name) as RuntimePropertyInfo; if ((PropertyInfo)runtimePropertyInfo == (PropertyInfo)null) { throw new CustomAttributeFormatException(string.Format((IFormatProvider)CultureInfo.CurrentUICulture, Environment.GetResourceString(isProperty ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), (object)name)); } RuntimeMethodInfo runtimeMethodInfo = runtimePropertyInfo.GetSetMethod(true) as RuntimeMethodInfo; if (runtimeMethodInfo.IsPublic) { RuntimeMethodHandle.CheckLinktimeDemands((IRuntimeMethodInfo)runtimeMethodInfo, decoratedModule, isDecoratedTargetSecurityTransparent); runtimeMethodInfo.UnsafeInvoke(target, BindingFlags.Default, (Binder)null, new object[1] { obj }, (CultureInfo)null); } } else { RtFieldInfo rtFieldInfo = attributeType.GetField(name) as RtFieldInfo; if (isDecoratedTargetSecurityTransparent) { RuntimeFieldHandle.CheckAttributeAccess(rtFieldInfo.FieldHandle, decoratedModule.GetNativeHandle()); } rtFieldInfo.CheckConsistency(target); rtFieldInfo.UnsafeSetValue(target, obj, BindingFlags.Default, Type.DefaultBinder, (CultureInfo)null); } } catch (Exception ex) { throw new CustomAttributeFormatException(string.Format((IFormatProvider)CultureInfo.CurrentUICulture, Environment.GetResourceString(isProperty ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), (object)name), ex); } } if (!ptr1.Equals((object)blobEnd)) { throw new CustomAttributeFormatException(); } attributeArrayHelper1[length++] = target; } } securityContextFrame.Pop(); if (length == attributeRecords.Length && pcaCount == 0) { return(attributeArrayHelper1); } object[] attributeArrayHelper2 = CustomAttribute.CreateAttributeArrayHelper(elementType, length + pcaCount); Array.Copy((Array)attributeArrayHelper1, 0, (Array)attributeArrayHelper2, 0, length); return(attributeArrayHelper2); }
private unsafe static object[] GetCustomAttributes(RuntimeModule decoratedModule, int decoratedMetadataToken, int pcaCount, RuntimeType attributeFilterType, bool mustBeInheritable, IList derivedAttributes, bool isDecoratedTargetSecurityTransparent) { if (decoratedModule.Assembly.ReflectionOnly) { throw new InvalidOperationException(Environment.GetResourceString("Arg_ReflectionOnlyCA")); } MetadataImport metadataImport = decoratedModule.MetadataImport; CustomAttributeRecord[] customAttributeRecords = CustomAttributeData.GetCustomAttributeRecords(decoratedModule, decoratedMetadataToken); Type elementType = (attributeFilterType == null || attributeFilterType.IsValueType || attributeFilterType.ContainsGenericParameters) ? typeof(object) : attributeFilterType; if (attributeFilterType == null && customAttributeRecords.Length == 0) { return(CustomAttribute.CreateAttributeArrayHelper(elementType, 0)); } object[] array = CustomAttribute.CreateAttributeArrayHelper(elementType, customAttributeRecords.Length); int num = 0; SecurityContextFrame securityContextFrame = default(SecurityContextFrame); securityContextFrame.Push(decoratedModule.GetRuntimeAssembly()); Assembly assembly = null; for (int i = 0; i < customAttributeRecords.Length; i++) { object obj = null; CustomAttributeRecord caRecord = customAttributeRecords[i]; IRuntimeMethodInfo runtimeMethodInfo = null; RuntimeType runtimeType = null; int num2 = 0; IntPtr intPtr = caRecord.blob.Signature; IntPtr intPtr2 = (IntPtr)((void *)((byte *)((void *)intPtr) + caRecord.blob.Length)); int num3 = (int)((long)((byte *)((void *)intPtr2) - (byte *)((void *)intPtr))); bool flag; bool isVarArg; if (CustomAttribute.FilterCustomAttributeRecord(caRecord, metadataImport, ref assembly, decoratedModule, decoratedMetadataToken, attributeFilterType, mustBeInheritable, array, derivedAttributes, out runtimeType, out runtimeMethodInfo, out flag, out isVarArg)) { if (runtimeMethodInfo != null) { RuntimeMethodHandle.CheckLinktimeDemands(runtimeMethodInfo, decoratedModule, isDecoratedTargetSecurityTransparent); } RuntimeConstructorInfo.CheckCanCreateInstance(runtimeType, isVarArg); if (flag) { obj = CustomAttribute.CreateCaObject(decoratedModule, runtimeMethodInfo, ref intPtr, intPtr2, out num2); } else { obj = RuntimeTypeHandle.CreateCaInstance(runtimeType, runtimeMethodInfo); if (num3 == 0) { num2 = 0; } else { if (Marshal.ReadInt16(intPtr) != 1) { throw new CustomAttributeFormatException(); } intPtr = (IntPtr)((void *)((byte *)((void *)intPtr) + 2)); num2 = (int)Marshal.ReadInt16(intPtr); intPtr = (IntPtr)((void *)((byte *)((void *)intPtr) + 2)); } } for (int j = 0; j < num2; j++) { IntPtr signature = caRecord.blob.Signature; string text; bool flag2; RuntimeType runtimeType2; object obj2; CustomAttribute.GetPropertyOrFieldData(decoratedModule, ref intPtr, intPtr2, out text, out flag2, out runtimeType2, out obj2); try { if (flag2) { if (runtimeType2 == null && obj2 != null) { runtimeType2 = (RuntimeType)obj2.GetType(); if (runtimeType2 == CustomAttribute.Type_RuntimeType) { runtimeType2 = CustomAttribute.Type_Type; } } RuntimePropertyInfo runtimePropertyInfo; if (runtimeType2 == null) { runtimePropertyInfo = (runtimeType.GetProperty(text) as RuntimePropertyInfo); } else { runtimePropertyInfo = (runtimeType.GetProperty(text, runtimeType2, Type.EmptyTypes) as RuntimePropertyInfo); } if (runtimePropertyInfo == null) { throw new CustomAttributeFormatException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString(flag2 ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), text)); } RuntimeMethodInfo runtimeMethodInfo2 = runtimePropertyInfo.GetSetMethod(true) as RuntimeMethodInfo; if (runtimeMethodInfo2.IsPublic) { RuntimeMethodHandle.CheckLinktimeDemands(runtimeMethodInfo2, decoratedModule, isDecoratedTargetSecurityTransparent); runtimeMethodInfo2.UnsafeInvoke(obj, BindingFlags.Default, null, new object[] { obj2 }, null); } } else { RtFieldInfo rtFieldInfo = runtimeType.GetField(text) as RtFieldInfo; if (isDecoratedTargetSecurityTransparent) { RuntimeFieldHandle.CheckAttributeAccess(rtFieldInfo.FieldHandle, decoratedModule.GetNativeHandle()); } rtFieldInfo.CheckConsistency(obj); rtFieldInfo.UnsafeSetValue(obj, obj2, BindingFlags.Default, Type.DefaultBinder, null); } } catch (Exception inner) { throw new CustomAttributeFormatException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString(flag2 ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), text), inner); } } if (!intPtr.Equals(intPtr2)) { throw new CustomAttributeFormatException(); } array[num++] = obj; } } securityContextFrame.Pop(); if (num == customAttributeRecords.Length && pcaCount == 0) { return(array); } object[] array2 = CustomAttribute.CreateAttributeArrayHelper(elementType, num + pcaCount); Array.Copy(array, 0, array2, 0, num); return(array2); }
private static unsafe object[] GetCustomAttributes(RuntimeModule decoratedModule, int decoratedMetadataToken, int pcaCount, RuntimeType attributeFilterType, bool mustBeInheritable, IList derivedAttributes, bool isDecoratedTargetSecurityTransparent) { if (decoratedModule.Assembly.ReflectionOnly) { throw new InvalidOperationException(Environment.GetResourceString("Arg_ReflectionOnlyCA")); } MetadataImport metadataImport = decoratedModule.MetadataImport; CustomAttributeRecord[] customAttributeRecords = CustomAttributeData.GetCustomAttributeRecords(decoratedModule, decoratedMetadataToken); Type elementType = (((attributeFilterType == null) || attributeFilterType.IsValueType) || attributeFilterType.ContainsGenericParameters) ? typeof(object) : attributeFilterType; if ((attributeFilterType == null) && (customAttributeRecords.Length == 0)) { return(CreateAttributeArrayHelper(elementType, 0)); } object[] attributes = CreateAttributeArrayHelper(elementType, customAttributeRecords.Length); int length = 0; SecurityContextFrame frame = new SecurityContextFrame(); frame.Push(decoratedModule.GetRuntimeAssembly()); Assembly lastAptcaOkAssembly = null; for (int i = 0; i < customAttributeRecords.Length; i++) { bool flag2; bool flag3; object obj2 = null; CustomAttributeRecord caRecord = customAttributeRecords[i]; IRuntimeMethodInfo ctor = null; RuntimeType attributeType = null; int namedArgs = 0; IntPtr signature = caRecord.blob.Signature; IntPtr blobEnd = (IntPtr)(((void *)signature) + caRecord.blob.Length); int num4 = (int)((long)((((void *)blobEnd) - ((void *)signature)) / 1)); if (FilterCustomAttributeRecord(caRecord, metadataImport, ref lastAptcaOkAssembly, decoratedModule, decoratedMetadataToken, attributeFilterType, mustBeInheritable, attributes, derivedAttributes, out attributeType, out ctor, out flag2, out flag3)) { if (ctor != null) { RuntimeMethodHandle.CheckLinktimeDemands(ctor, decoratedModule, isDecoratedTargetSecurityTransparent); } RuntimeConstructorInfo.CheckCanCreateInstance(attributeType, flag3); if (flag2) { obj2 = CreateCaObject(decoratedModule, ctor, ref signature, blobEnd, out namedArgs); } else { obj2 = RuntimeTypeHandle.CreateCaInstance(attributeType, ctor); if (num4 == 0) { namedArgs = 0; } else { if (Marshal.ReadInt16(signature) != 1) { throw new CustomAttributeFormatException(); } signature = (IntPtr)(((void *)signature) + 2); namedArgs = Marshal.ReadInt16(signature); signature = (IntPtr)(((void *)signature) + 2); } } for (int j = 0; j < namedArgs; j++) { string str; bool flag4; RuntimeType type; object obj3; IntPtr ptr1 = caRecord.blob.Signature; GetPropertyOrFieldData(decoratedModule, ref signature, blobEnd, out str, out flag4, out type, out obj3); try { if (flag4) { if ((type == null) && (obj3 != null)) { type = (RuntimeType)obj3.GetType(); if (type == Type_RuntimeType) { type = Type_Type; } } RuntimePropertyInfo property = null; if (type == null) { property = attributeType.GetProperty(str) as RuntimePropertyInfo; } else { property = attributeType.GetProperty(str, type, Type.EmptyTypes) as RuntimePropertyInfo; } if (property == null) { throw new CustomAttributeFormatException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString(flag4 ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), new object[] { str })); } RuntimeMethodInfo setMethod = property.GetSetMethod(true) as RuntimeMethodInfo; if (setMethod.IsPublic) { RuntimeMethodHandle.CheckLinktimeDemands(setMethod, decoratedModule, isDecoratedTargetSecurityTransparent); setMethod.Invoke(obj2, BindingFlags.Default, null, new object[] { obj3 }, null, true); } } else { RtFieldInfo field = attributeType.GetField(str) as RtFieldInfo; if (isDecoratedTargetSecurityTransparent) { RuntimeFieldHandle.CheckAttributeAccess(field.FieldHandle, decoratedModule.GetNativeHandle()); } field.InternalSetValue(obj2, obj3, BindingFlags.Default, Type.DefaultBinder, null, false); } } catch (Exception exception) { throw new CustomAttributeFormatException(string.Format(CultureInfo.CurrentUICulture, Environment.GetResourceString(flag4 ? "RFLCT.InvalidPropFail" : "RFLCT.InvalidFieldFail"), new object[] { str }), exception); } } if (!signature.Equals(blobEnd)) { throw new CustomAttributeFormatException(); } attributes[length++] = obj2; } } frame.Pop(); if ((length == customAttributeRecords.Length) && (pcaCount == 0)) { return(attributes); } object[] destinationArray = CreateAttributeArrayHelper(elementType, length + pcaCount); Array.Copy(attributes, 0, destinationArray, 0, length); return(destinationArray); }
public override FieldInfo?GetField(string name, BindingFlags bindingAttr) { ArgumentNullException.ThrowIfNull(name); return(RuntimeType?.GetField(name, bindingAttr)); }