Files
wyatt 648386cd73 Lua向C#逻辑迁移 一期 #13
将整个插件代码上传
2025-10-26 21:48:39 +08:00

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