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