34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using Mono.Cecil;
 | 
						|
 | 
						|
namespace UnrealSharpWeaver.Utilities;
 | 
						|
 | 
						|
public static class DelegateUtilities
 | 
						|
{
 | 
						|
    public static MethodDefinition GetDelegateInvokeMethod(TypeDefinition typeDefinition)
 | 
						|
    {
 | 
						|
        foreach (MethodDefinition method in typeDefinition.Methods)
 | 
						|
        {
 | 
						|
            if (method.Name != "Invoke")
 | 
						|
            {
 | 
						|
                continue;
 | 
						|
            }
 | 
						|
            
 | 
						|
            if (!method.ReturnsVoid())
 | 
						|
            {
 | 
						|
                throw new Exception($"{typeDefinition.FullName} is exposed to Unreal Engine, and must have a void return type.");
 | 
						|
            }
 | 
						|
            
 | 
						|
            return method;
 | 
						|
        }
 | 
						|
        
 | 
						|
        throw new Exception($"Delegate type {typeDefinition.FullName} does not have an Invoke method.");
 | 
						|
    }
 | 
						|
    
 | 
						|
    public static string GetUnrealDelegateName(TypeReference typeDefinition)
 | 
						|
    {
 | 
						|
        string functionName = typeDefinition.FullName;
 | 
						|
        functionName = functionName.Replace(".", "_");
 | 
						|
        functionName += "__DelegateSignature";
 | 
						|
        return functionName;
 | 
						|
    }
 | 
						|
} |