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