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