From e2f9646b8f3ac8b748488c08428a3e136e9a2cbb Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 23 Mar 2021 12:31:30 +0100 Subject: [PATCH] Fix using nested types in scripting api --- .../Bindings/BindingsGenerator.Api.cs | 5 ++- .../Bindings/BindingsGenerator.Cpp.cs | 5 ++- Source/Tools/Flax.Build/Bindings/TypeInfo.cs | 38 ++++++++++++++----- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs index 82128eaa7..27c902a5c 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs @@ -261,7 +261,10 @@ namespace Flax.Build.Bindings { if (typeInfo == null) return null; - if (buildData.TypeCache.TryGetValue(typeInfo, out var result)) + var result = FindApiTypeInfoInner(typeInfo, caller); + if (result != null) + return result; + if (buildData.TypeCache.TryGetValue(typeInfo, out result)) return result; // Find across in-build types diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs index 35ca38077..424286e0e 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs @@ -473,10 +473,11 @@ namespace Flax.Build.Bindings // Array if (typeInfo.Type == "Array" && typeInfo.GenericArgs != null) { + var T = typeInfo.GenericArgs[0].GetFullNameNative(buildData, caller); type = "MonoArray*"; if (typeInfo.GenericArgs.Count != 1) - return "MUtils::ToArray<" + typeInfo.GenericArgs[0] + ", " + typeInfo.GenericArgs[1] + ">({0})"; - return "MUtils::ToArray<" + typeInfo.GenericArgs[0] + ">({0})"; + return "MUtils::ToArray<" + T + ", " + typeInfo.GenericArgs[1] + ">({0})"; + return "MUtils::ToArray<" + T + ">({0})"; } // Span diff --git a/Source/Tools/Flax.Build/Bindings/TypeInfo.cs b/Source/Tools/Flax.Build/Bindings/TypeInfo.cs index 2d15f6651..443b0687a 100644 --- a/Source/Tools/Flax.Build/Bindings/TypeInfo.cs +++ b/Source/Tools/Flax.Build/Bindings/TypeInfo.cs @@ -80,35 +80,55 @@ namespace Flax.Build.Bindings GenericArgs = BindingsGenerator.Read(reader, GenericArgs); } - public override string ToString() + public string GetFullNameNative(Builder.BuildData buildData, ApiTypeInfo caller) { - var sb = new StringBuilder(64); + var type = BindingsGenerator.FindApiTypeInfo(buildData, this, caller); + if (type == null) + return ToString(); + var sb = new StringBuilder(64); if (IsConst) sb.Append("const "); - - sb.Append(Type); - + sb.Append(type.FullNameNative); if (GenericArgs != null) { sb.Append('<'); - for (var i = 0; i < GenericArgs.Count; i++) { if (i != 0) sb.Append(", "); sb.Append(GenericArgs[i]); } - sb.Append('>'); } - if (IsRef) sb.Append('&'); - if (IsPtr) sb.Append('*'); + return sb.ToString(); + } + public override string ToString() + { + var sb = new StringBuilder(64); + if (IsConst) + sb.Append("const "); + sb.Append(Type); + if (GenericArgs != null) + { + sb.Append('<'); + for (var i = 0; i < GenericArgs.Count; i++) + { + if (i != 0) + sb.Append(", "); + sb.Append(GenericArgs[i]); + } + sb.Append('>'); + } + if (IsRef) + sb.Append('&'); + if (IsPtr) + sb.Append('*'); return sb.ToString(); }