63 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Mono.Cecil;
 | |
| 
 | |
| namespace UnrealSharpWeaver.Utilities;
 | |
| 
 | |
| public static class AttributeUtilities
 | |
| {
 | |
|     public static readonly string UMetaDataAttribute = "UMetaDataAttribute";
 | |
|     public static readonly string MetaTagsNamespace = WeaverImporter.AttributeNamespace + ".MetaTags";
 | |
|     
 | |
|     public static List<CustomAttribute> FindMetaDataAttributes(this IEnumerable<CustomAttribute> customAttributes)
 | |
|     {
 | |
|         return FindAttributesByType(customAttributes, WeaverImporter.AttributeNamespace, UMetaDataAttribute);
 | |
|     }
 | |
| 
 | |
|     public static List<CustomAttribute> FindMetaDataAttributesByNamespace(this IEnumerable<CustomAttribute> customAttributes)
 | |
|     {
 | |
|         return FindAttributesByNamespace(customAttributes, MetaTagsNamespace);
 | |
|     }
 | |
| 
 | |
|     public static CustomAttributeArgument? FindAttributeField(this CustomAttribute attribute, string fieldName)
 | |
|     {
 | |
|         foreach (var field in attribute.Fields) 
 | |
|         {
 | |
|             if (field.Name == fieldName) 
 | |
|             {
 | |
|                 return field.Argument;
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
|     
 | |
|     public static CustomAttribute? FindAttributeByType(this IEnumerable<CustomAttribute> customAttributes, string typeNamespace, string typeName)
 | |
|     {
 | |
|         List<CustomAttribute> attribs = FindAttributesByType(customAttributes, typeNamespace, typeName);
 | |
|         return attribs.Count == 0 ? null : attribs[0];
 | |
|     }
 | |
| 
 | |
|     public static List<CustomAttribute> FindAttributesByType(this IEnumerable<CustomAttribute> customAttributes, string typeNamespace, string typeName)
 | |
|     {
 | |
|         List<CustomAttribute> attribs = new List<CustomAttribute>();
 | |
|         foreach (CustomAttribute attrib in customAttributes)
 | |
|         {
 | |
|             if (attrib.AttributeType.Namespace == typeNamespace && attrib.AttributeType.Name == typeName)
 | |
|             {
 | |
|                 attribs.Add(attrib);
 | |
|             }
 | |
|         }
 | |
|         return attribs;
 | |
|     }
 | |
| 
 | |
|     public static List<CustomAttribute> FindAttributesByNamespace(this IEnumerable<CustomAttribute> customAttributes, string typeNamespace)
 | |
|     {
 | |
|         List<CustomAttribute> attribs = new List<CustomAttribute>();
 | |
|         foreach (var attrib in customAttributes)
 | |
|         {
 | |
|             if (attrib.AttributeType.Namespace == typeNamespace)
 | |
|             {
 | |
|                 attribs.Add(attrib);
 | |
|             }
 | |
|         }
 | |
|         return attribs;
 | |
|     }
 | |
| } |