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; | ||
|  |     } | ||
|  | } |