| File: Compiler\CustomAttributeExtensions.cs | Web Access |
| Project: src\runtime\src\coreclr\tools\aot\ILCompiler.Compiler\ILCompiler.Compiler.csproj (ILCompiler.Compiler) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Reflection.Metadata; using Internal.TypeSystem; using Internal.TypeSystem.Ecma; namespace ILCompiler { public static class CustomAttributeExtensions { public static CustomAttributeValue<TypeDesc>? GetDecodedCustomAttribute(this PropertyPseudoDesc prop, string attributeNamespace, string attributeName) { var ecmaType = prop.OwningType; var metadataReader = ecmaType.MetadataReader; var attributeHandle = metadataReader.GetCustomAttributeHandle(prop.GetCustomAttributes, attributeNamespace, attributeName); if (attributeHandle.IsNil) return null; return metadataReader.GetCustomAttribute(attributeHandle).DecodeValue(new CustomAttributeTypeProvider(ecmaType.Module)); } public static IEnumerable<CustomAttributeValue<TypeDesc>> GetDecodedCustomAttributes(this PropertyPseudoDesc prop, string attributeNamespace, string attributeName) { var ecmaType = prop.OwningType; var metadataReader = ecmaType.MetadataReader; var attributeHandles = prop.GetCustomAttributes; foreach (var attributeHandle in attributeHandles) { if (MetadataExtensions.IsEqualCustomAttributeName(attributeHandle, metadataReader, attributeNamespace, attributeName)) { yield return metadataReader.GetCustomAttribute(attributeHandle).DecodeValue(new CustomAttributeTypeProvider(ecmaType.Module)); } } } public static CustomAttributeValue<TypeDesc>? GetDecodedCustomAttribute(this EventPseudoDesc @event, string attributeNamespace, string attributeName) { var ecmaType = @event.OwningType; var metadataReader = ecmaType.MetadataReader; var attributeHandle = metadataReader.GetCustomAttributeHandle(@event.GetCustomAttributes, attributeNamespace, attributeName); if (attributeHandle.IsNil) return null; return metadataReader.GetCustomAttribute(attributeHandle).DecodeValue(new CustomAttributeTypeProvider(ecmaType.Module)); } public static IEnumerable<CustomAttributeValue<TypeDesc>> GetDecodedCustomAttributes(this EventPseudoDesc @event, string attributeNamespace, string attributeName) { var ecmaType = @event.OwningType; var metadataReader = ecmaType.MetadataReader; var attributeHandles = @event.GetCustomAttributes; foreach (var attributeHandle in attributeHandles) { if (MetadataExtensions.IsEqualCustomAttributeName(attributeHandle, metadataReader, attributeNamespace, attributeName)) { yield return metadataReader.GetCustomAttribute(attributeHandle).DecodeValue(new CustomAttributeTypeProvider(ecmaType.Module)); } } } public static IEnumerable<CustomAttributeValue<TypeDesc>> GetDecodedCustomAttributesForModule(this EcmaModule module, string attributeNamespace, string attributeName) { var metadataReader = module.MetadataReader; var attributeHandles = metadataReader.GetModuleDefinition().GetCustomAttributes(); foreach (var attributeHandle in attributeHandles) { if (MetadataExtensions.IsEqualCustomAttributeName(attributeHandle, metadataReader, attributeNamespace, attributeName)) { yield return metadataReader.GetCustomAttribute(attributeHandle).DecodeValue(new CustomAttributeTypeProvider(module)); } } } } }