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