internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type) { List<int> elementTypes = new List<int>(); while(type.HasElementType) { if (type.IsSzArray) { elementTypes.Add(SzArray); } else if (type.IsArray) { elementTypes.Add(type.GetArrayRank()); elementTypes.Add(Array); } else if (type.IsPointer) { elementTypes.Add(Pointer); } else if (type.IsByRef) { elementTypes.Add(ByRef); } type = (RuntimeType)type.GetElementType(); } info.AddValue("ElementTypes", elementTypes.ToArray(), typeof(int[])); return type; }
internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type) { List <int> list = new List <int>(); while (type.HasElementType) { if (type.IsSzArray) { list.Add(3); } else if (type.IsArray) { list.Add(type.GetArrayRank()); list.Add(2); } else if (type.IsPointer) { list.Add(1); } else if (type.IsByRef) { list.Add(4); } type = (RuntimeType)type.GetElementType(); } info.AddValue("ElementTypes", list.ToArray(), typeof(int[])); return(type); }
internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type) { List <int> elementTypes = new List <int>(); while (type.HasElementType) { if (type.IsSZArray) { elementTypes.Add(SzArray); } else if (type.IsArray) { elementTypes.Add(type.GetArrayRank()); elementTypes.Add(Array); } else if (type.IsPointer) { elementTypes.Add(Pointer); } else if (type.IsByRef) { elementTypes.Add(ByRef); } type = (RuntimeType)type.GetElementType(); } info.AddValue("ElementTypes", elementTypes.ToArray(), typeof(int[])); return(type); }
internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type) { List<int> list = new List<int>(); while (type.HasElementType) { if (type.IsSzArray) { list.Add(3); } else { if (type.IsArray) { list.Add(type.GetArrayRank()); list.Add(2); } else { if (type.IsPointer) { list.Add(1); } else { if (type.IsByRef) { list.Add(4); } } } } type = (RuntimeType)type.GetElementType(); } info.AddValue("ElementTypes", list.ToArray(), typeof(int[])); return type; }
private static CustomAttributeType InitCustomAttributeType(RuntimeType parameterType) { CustomAttributeEncoding encodedType = TypeToCustomAttributeEncoding(parameterType); CustomAttributeEncoding undefined = CustomAttributeEncoding.Undefined; CustomAttributeEncoding encodedEnumType = CustomAttributeEncoding.Undefined; string enumName = null; if (encodedType == CustomAttributeEncoding.Array) { parameterType = (RuntimeType) parameterType.GetElementType(); undefined = TypeToCustomAttributeEncoding(parameterType); } if ((encodedType == CustomAttributeEncoding.Enum) || (undefined == CustomAttributeEncoding.Enum)) { encodedEnumType = TypeToCustomAttributeEncoding((RuntimeType) Enum.GetUnderlyingType(parameterType)); enumName = parameterType.AssemblyQualifiedName; } return new CustomAttributeType(encodedType, undefined, encodedEnumType, enumName); }
[System.Security.SecurityCritical] // auto-generated internal static Attribute[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool includeSecCa, out int count) { Contract.Requires(type != null); Contract.Requires(caType != null); count = 0; bool all = caType == (RuntimeType)typeof(object) || caType == (RuntimeType)typeof(Attribute); if (!all && s_pca.GetValueOrDefault(caType) == null && !IsSecurityAttribute(caType)) return new Attribute[0]; List<Attribute> pcas = new List<Attribute>(); Attribute pca = null; #if FEATURE_SERIALIZATION if (all || caType == (RuntimeType)typeof(SerializableAttribute)) { pca = SerializableAttribute.GetCustomAttribute(type); if (pca != null) pcas.Add(pca); } #endif if (all || caType == (RuntimeType)typeof(ComImportAttribute)) { pca = ComImportAttribute.GetCustomAttribute(type); if (pca != null) pcas.Add(pca); } if (includeSecCa && (all || IsSecurityAttribute(caType))) { if (!type.IsGenericParameter && type.GetElementType() == null) { if (type.IsGenericType) type = (RuntimeType)type.GetGenericTypeDefinition(); object[] securityAttributes; GetSecurityAttributes(type.Module.ModuleHandle.GetRuntimeModule(), type.MetadataToken, false, out securityAttributes); if (securityAttributes != null) foreach (object a in securityAttributes) if (caType == a.GetType() || a.GetType().IsSubclassOf(caType)) pcas.Add((Attribute)a); } } count = pcas.Count; return pcas.ToArray(); }
[System.Security.SecurityCritical] // auto-generated internal static Object[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool inherit) { Contract.Requires(type != null); Contract.Requires(caType != null); if (type.GetElementType() != null) return (caType.IsValueType) ? EmptyArray<Object>.Value : CreateAttributeArrayHelper(caType, 0); if (type.IsGenericType && !type.IsGenericTypeDefinition) type = type.GetGenericTypeDefinition() as RuntimeType; int pcaCount = 0; Attribute[] pca = PseudoCustomAttribute.GetCustomAttributes(type, caType, true, out pcaCount); // if we are asked to go up the hierarchy chain we have to do it now and regardless of the // attribute usage for the specific attribute because a derived attribute may override the usage... // ... however if the attribute is sealed we can rely on the attribute usage if (!inherit || (caType.IsSealed && !CustomAttribute.GetAttributeUsage(caType).Inherited)) { object[] attributes = GetCustomAttributes(type.GetRuntimeModule(), type.MetadataToken, pcaCount, caType, !AllowCriticalCustomAttributes(type)); if (pcaCount > 0) Array.Copy(pca, 0, attributes, attributes.Length - pcaCount, pcaCount); return attributes; } List<object> result = new List<object>(); bool mustBeInheritable = false; bool useObjectArray = (caType == null || caType.IsValueType || caType.ContainsGenericParameters); Type arrayType = useObjectArray ? typeof(object) : caType; while (pcaCount > 0) result.Add(pca[--pcaCount]); while (type != (RuntimeType)typeof(object) && type != null) { object[] attributes = GetCustomAttributes(type.GetRuntimeModule(), type.MetadataToken, 0, caType, mustBeInheritable, result, !AllowCriticalCustomAttributes(type)); mustBeInheritable = true; for (int i = 0; i < attributes.Length; i++) result.Add(attributes[i]); type = type.BaseType as RuntimeType; } object[] typedResult = CreateAttributeArrayHelper(arrayType, result.Count); Array.Copy(result.ToArray(), 0, typedResult, 0, result.Count); return typedResult; }
[System.Security.SecurityCritical] // auto-generated internal static bool IsDefined(RuntimeType type, RuntimeType caType, bool inherit) { Contract.Requires(type != null); if (type.GetElementType() != null) return false; if (PseudoCustomAttribute.IsDefined(type, caType)) return true; if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType)) return true; if (!inherit) return false; type = type.BaseType as RuntimeType; while (type != null) { if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType, 0, inherit)) return true; type = type.BaseType as RuntimeType; } return false; }
internal static bool IsDefined(RuntimeType type, RuntimeType caType, bool inherit) { if (type.GetElementType() == null) { if (PseudoCustomAttribute.IsDefined(type, caType)) { return true; } if (IsCustomAttributeDefined(type.Module, type.MetadataToken, caType)) { return true; } if (!inherit) { return false; } type = type.BaseType as RuntimeType; while (type != null) { if (IsCustomAttributeDefined(type.Module, type.MetadataToken, caType, inherit)) { return true; } type = type.BaseType as RuntimeType; } } return false; }
internal static object[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool inherit) { if (type.GetElementType() != null) { if (!caType.IsValueType) { return (object[]) Array.CreateInstance(caType, 0); } return new object[0]; } if (type.IsGenericType && !type.IsGenericTypeDefinition) { type = type.GetGenericTypeDefinition() as RuntimeType; } int count = 0; Attribute[] sourceArray = PseudoCustomAttribute.GetCustomAttributes(type, caType, true, out count); if (!inherit || (caType.IsSealed && !GetAttributeUsage(caType).Inherited)) { object[] objArray = GetCustomAttributes(type.Module, type.MetadataToken, count, caType); if (count > 0) { Array.Copy(sourceArray, 0, objArray, objArray.Length - count, count); } return objArray; } List<object> derivedAttributes = new List<object>(); bool mustBeInheritable = false; Type elementType = (((caType == null) || caType.IsValueType) || caType.ContainsGenericParameters) ? typeof(object) : caType; while (count > 0) { derivedAttributes.Add(sourceArray[--count]); } while ((type != typeof(object)) && (type != null)) { object[] objArray2 = GetCustomAttributes(type.Module, type.MetadataToken, 0, caType, mustBeInheritable, derivedAttributes); mustBeInheritable = true; for (int i = 0; i < objArray2.Length; i++) { derivedAttributes.Add(objArray2[i]); } type = type.BaseType as RuntimeType; } object[] destinationArray = Array.CreateInstance(elementType, derivedAttributes.Count) as object[]; Array.Copy(derivedAttributes.ToArray(), 0, destinationArray, 0, derivedAttributes.Count); return destinationArray; }
[System.Security.SecurityCritical] // auto-generated internal static bool IsDefined(RuntimeType type, RuntimeType caType, bool inherit) { Contract.Requires(type != null); #if !FEATURE_CORECLR if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && caType != null) { FrameworkEventSource.Log.QueryAttributeIsDefined(caType.GetFullNameForEtw()); } #endif if (type.GetElementType() != null) return false; if (PseudoCustomAttribute.IsDefined(type, caType)) return true; if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType)) return true; if (!inherit) return false; type = type.BaseType as RuntimeType; while (type != null) { if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType, 0, inherit)) return true; type = type.BaseType as RuntimeType; } return false; }
internal static Attribute[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool includeSecCa, out int count) { count = 0; bool flag = (caType == ((RuntimeType) typeof(object))) || (caType == ((RuntimeType) typeof(Attribute))); if ((!flag && (s_pca.GetValueOrDefault(caType) == null)) && !IsSecurityAttribute(caType)) { return new Attribute[0]; } List<Attribute> list = new List<Attribute>(); Attribute item = null; if (flag || (caType == ((RuntimeType) typeof(SerializableAttribute)))) { item = SerializableAttribute.GetCustomAttribute(type); if (item != null) { list.Add(item); } } if (flag || (caType == ((RuntimeType) typeof(ComImportAttribute)))) { item = ComImportAttribute.GetCustomAttribute(type); if (item != null) { list.Add(item); } } if ((includeSecCa && (flag || IsSecurityAttribute(caType))) && (!type.IsGenericParameter && (type.GetElementType() == null))) { object[] objArray; if (type.IsGenericType) { type = (RuntimeType) type.GetGenericTypeDefinition(); } GetSecurityAttributes(type.Module.ModuleHandle.GetRuntimeModule(), type.MetadataToken, false, out objArray); if (objArray != null) { foreach (object obj2 in objArray) { if ((caType == obj2.GetType()) || obj2.GetType().IsSubclassOf(caType)) { list.Add((Attribute) obj2); } } } } count = list.Count; return list.ToArray(); }