50 lines
1.6 KiB
C#
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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|