@ -0,0 +1,56 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user