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