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

50 lines
1.6 KiB
C#

using Mono.Cecil;
using UnrealSharpWeaver.Utilities;
namespace UnrealSharpWeaver.MetaData;
public class InterfaceMetaData : TypeReferenceMetadata
{
public TypeReferenceMetadata ParentInterface { get; set; }
public List<FunctionMetaData> Functions { get; set; }
// Non-serialized for JSON
const string CannotImplementInterfaceInBlueprint = "CannotImplementInterfaceInBlueprint";
// End non-serialized
public InterfaceMetaData(TypeDefinition typeDefinition) : base(typeDefinition, TypeDefinitionUtilities.UInterfaceAttribute)
{
Functions = [];
if (typeDefinition.HasInterfaces)
{
foreach (InterfaceImplementation? interfaceType in typeDefinition.Interfaces)
{
TypeDefinition interfaceDef = interfaceType.InterfaceType.Resolve();
if (!interfaceDef.IsUInterface())
{
continue;
}
ParentInterface = new TypeReferenceMetadata(interfaceDef);
break;
}
}
foreach (var method in typeDefinition.Methods)
{
if (method.IsAbstract && method.IsUFunction())
{
Functions.Add(new FunctionMetaData(method, onlyCollectMetaData: true));
}
}
CustomAttributeArgument? nonBpInterface = BaseAttribute!.FindAttributeField(CannotImplementInterfaceInBlueprint);
if (nonBpInterface != null)
{
TryAddMetaData(CannotImplementInterfaceInBlueprint, (bool) nonBpInterface.Value.Value);
}
}
}