Files
BusyRabbit/Plugins/UnrealSharp/Managed/UnrealSharpPrograms/UnrealSharpWeaver/MetaData/InterfaceMetaData.cs

50 lines
1.6 KiB
C#
Raw Normal View History

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