70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using EpicGames.Core;
 | 
						|
using EpicGames.UHT.Types;
 | 
						|
 | 
						|
namespace UnrealSharpScriptGenerator.Utilities;
 | 
						|
 | 
						|
public static class ClassUtilities
 | 
						|
{
 | 
						|
    public static UhtFunction? FindFunctionByName(this UhtClass classObj, string functionName, Func<UhtFunction, string, bool>? customCompare = null, bool includeSuper = false)
 | 
						|
        => FindTypeInHierarchy(classObj, c => c.Functions, functionName, customCompare, includeSuper);
 | 
						|
 | 
						|
    public static UhtProperty? FindPropertyByName(this UhtClass classObj, string propertyName, Func<UhtProperty, string, bool>? customCompare = null, bool includeSuper = false)
 | 
						|
        => FindTypeInHierarchy(classObj, c => c.Properties, propertyName, customCompare, includeSuper);
 | 
						|
 | 
						|
    private static T? FindTypeInHierarchy<T>(UhtClass? classObj, Func<UhtClass, IEnumerable<T>> selector,
 | 
						|
        string typeName, Func<T, string, bool>? customCompare, bool includeSuper) where T : UhtType
 | 
						|
    {
 | 
						|
        for (UhtClass? current = classObj; current != null; current = includeSuper ? current.SuperClass : null)
 | 
						|
        {
 | 
						|
            T? match = FindTypeByName(typeName, selector(current), customCompare);
 | 
						|
 | 
						|
            if (match != null)
 | 
						|
            {
 | 
						|
                return match;
 | 
						|
            }
 | 
						|
 | 
						|
            if (!includeSuper)
 | 
						|
            {
 | 
						|
                break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    private static T? FindTypeByName<T>(string typeName, IEnumerable<T> types, Func<T, string, bool>? customCompare = null) where T : UhtType
 | 
						|
    {
 | 
						|
        foreach (var type in types)
 | 
						|
        {
 | 
						|
            if ((customCompare != null && customCompare(type, typeName)) ||
 | 
						|
                string.Equals(type.SourceName, typeName, StringComparison.InvariantCultureIgnoreCase))
 | 
						|
            {
 | 
						|
                return type;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    public static UhtClass? GetInterfaceAlternateClass(this UhtClass thisInterface)
 | 
						|
    {
 | 
						|
        if (thisInterface.EngineType is not (UhtEngineType.Interface or UhtEngineType.NativeInterface))
 | 
						|
        {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        return thisInterface.AlternateObject as UhtClass;
 | 
						|
    }
 | 
						|
 | 
						|
    public static bool HasAnyFlags(this UhtClass classObj, EClassFlags flags)
 | 
						|
    {
 | 
						|
        return (classObj.ClassFlags & flags) != 0;
 | 
						|
    }
 | 
						|
 | 
						|
    public static bool HasAllFlags(this UhtClass classObj, EClassFlags flags)
 | 
						|
    {
 | 
						|
        return (classObj.ClassFlags & flags) == flags;
 | 
						|
    }
 | 
						|
} |