diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs index 379f7155a..9b6d2c16d 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs @@ -50,10 +50,28 @@ namespace Flax.Build.Bindings { "MonoArray", "Array" }, }; - private static string GenerateCSharpDefaultValueNativeToManaged(BuildData buildData, string value, ApiTypeInfo caller) + private static string GenerateCSharpDefaultValueNativeToManaged(BuildData buildData, string value, ApiTypeInfo caller, bool attribute = false) { if (string.IsNullOrEmpty(value)) return null; + + // Special case for Engine TEXT macro + if (value.StartsWith("TEXT(\"") && value.EndsWith("\")")) + return value.Substring(5, value.Length - 6); + + if (attribute) + { + // Value constructors (eg. Vector2(1, 2)) + // TODO: support value constructors for default value attribute + if (value.Contains('(') && value.Contains(')')) + return null; + + // Constants (eg. Vector2::Zero) + // TODO: support constants for default value attribute + if (value.Contains("::")) + return null; + } + value = value.Replace("::", "."); // Skip constants unsupported in C# @@ -66,10 +84,6 @@ namespace Flax.Build.Bindings return null; } - // Special case for Engine TEXT macro - if (value.Contains("TEXT(\"")) - return value.Replace("TEXT(\"", "(\""); - // Special case for value constructors if (value.Contains('(') && value.Contains(')')) return "new " + value; @@ -394,26 +408,6 @@ namespace Flax.Build.Bindings } } - private static bool IsDefaultValueSupported(string value) - { - // TEXT macro (eg. TEXT("text")) - // TODO: support string for default value attribute - if (value.Contains("TEXT(\"")) - return false; - - // Value constructors (eg. Vector2(1, 2)) - // TODO: support value constructors for default value attribute - if (value.Contains('(') && value.Contains(')')) - return false; - - // Constants (eg. Vector2::Zero) - // TODO: support constants for default value attribute - if (value.Contains("::")) - return false; - - return true; - } - private static void GenerateCSharpAttributes(BuildData buildData, StringBuilder contents, string indent, ApiTypeInfo apiTypeInfo, string attributes, string[] comment, bool canUseTooltip, bool useUnmanaged, string defaultValue = null) { var writeTooltip = true; @@ -453,11 +447,12 @@ namespace Flax.Build.Bindings contents.Append(indent).Append("[Tooltip(\"").Append(tooltip).Append("\")]").AppendLine(); } } - if (!string.IsNullOrEmpty(defaultValue) && writeDefaultValue && IsDefaultValueSupported(defaultValue)) + if (writeDefaultValue) { // Write default value attribute - defaultValue = GenerateCSharpDefaultValueNativeToManaged(buildData, defaultValue, apiTypeInfo); - contents.Append(indent).Append("[DefaultValue(").Append(defaultValue).Append(")]").AppendLine(); + defaultValue = GenerateCSharpDefaultValueNativeToManaged(buildData, defaultValue, apiTypeInfo, true); + if (defaultValue != null) + contents.Append(indent).Append("[DefaultValue(").Append(defaultValue).Append(")]").AppendLine(); } } @@ -647,12 +642,9 @@ namespace Flax.Build.Bindings contents.Append(returnValueType).Append(' ').Append(fieldInfo.Name); if (!useUnmanaged) { - if (fieldInfo.DefaultValue != null) - { - var defaultValue = GenerateCSharpDefaultValueNativeToManaged(buildData, fieldInfo.DefaultValue, classInfo); - if (!string.IsNullOrEmpty(defaultValue)) - contents.Append(" = ").Append(defaultValue); - } + var defaultValue = GenerateCSharpDefaultValueNativeToManaged(buildData, fieldInfo.DefaultValue, classInfo); + if (!string.IsNullOrEmpty(defaultValue)) + contents.Append(" = ").Append(defaultValue); contents.AppendLine(";"); continue; } @@ -778,12 +770,9 @@ namespace Flax.Build.Bindings contents.Append(' '); contents.Append(parameterInfo.Name); - if (parameterInfo.DefaultValue != null) - { - var defaultValue = GenerateCSharpDefaultValueNativeToManaged(buildData, parameterInfo.DefaultValue, classInfo); - if (!string.IsNullOrEmpty(defaultValue)) - contents.Append(" = ").Append(defaultValue); - } + var defaultValue = GenerateCSharpDefaultValueNativeToManaged(buildData, parameterInfo.DefaultValue, classInfo); + if (!string.IsNullOrEmpty(defaultValue)) + contents.Append(" = ").Append(defaultValue); } contents.Append(')').AppendLine().AppendLine(indent + "{");