56 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections.Generic;
 | |
| using EpicGames.UHT.Types;
 | |
| using UnrealSharpScriptGenerator.Utilities;
 | |
| 
 | |
| namespace UnrealSharpScriptGenerator.Exporters;
 | |
| 
 | |
| public static class ExtensionsClassExporter
 | |
| {
 | |
|     public static void ExportExtensionsClass(UhtPackage package, List<ExtensionMethod> extensionMethods)
 | |
|     {
 | |
|         Dictionary<UhtType, List<ExtensionMethod>?> libraryToExtensionMethod = new();
 | |
|         
 | |
|         foreach (ExtensionMethod extensionMethod in extensionMethods)
 | |
|         {
 | |
|             UhtType outerClass = extensionMethod.Function.Outer!;
 | |
|             
 | |
|             if (!libraryToExtensionMethod.TryGetValue(outerClass, out List<ExtensionMethod>? libraryExtensions))
 | |
|             {
 | |
|                 libraryExtensions = new List<ExtensionMethod>();
 | |
|                 libraryToExtensionMethod[outerClass] = libraryExtensions;
 | |
|             }
 | |
|             
 | |
|             libraryExtensions!.Add(extensionMethod);
 | |
|         }
 | |
|         
 | |
|         foreach (KeyValuePair<UhtType, List<ExtensionMethod>?> pair in libraryToExtensionMethod)
 | |
|         {
 | |
|             UhtType libraryClass = pair.Key;
 | |
|             List<ExtensionMethod>? libraryExtensions = pair.Value;
 | |
|             ExportLibrary(package, libraryClass, libraryExtensions!);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static void ExportLibrary(UhtPackage package, UhtType libraryClass, List<ExtensionMethod> extensionMethods)
 | |
|     {
 | |
|         string typeNamespace = package.GetNamespace();
 | |
|         string className = $"{libraryClass.EngineName}_Extensions";
 | |
|         
 | |
|         GeneratorStringBuilder stringBuilder = new();
 | |
|         stringBuilder.GenerateTypeSkeleton(typeNamespace);
 | |
|         stringBuilder.DeclareType(package, "static class", className, null, false);
 | |
|         
 | |
|         foreach (ExtensionMethod extensionMethod in extensionMethods)
 | |
|         {
 | |
|             FunctionExporter exporter = new FunctionExporter(extensionMethod);
 | |
|             exporter.Initialize(OverloadMode.AllowOverloads, EFunctionProtectionMode.UseUFunctionProtection, EBlueprintVisibility.Call);
 | |
|             exporter.ExportExtensionMethodOverloads(stringBuilder);
 | |
|             exporter.ExportExtensionMethod(stringBuilder);
 | |
|         }
 | |
|         
 | |
|         stringBuilder.CloseBrace();
 | |
|         
 | |
|         string directory = FileExporter.GetDirectoryPath(package);
 | |
|         FileExporter.SaveGlueToDisk(package, directory, className, stringBuilder.ToString());
 | |
|     }
 | |
| } |