From 06b716d8b35c9bcaf0efb8da4ee696d0c6d31223 Mon Sep 17 00:00:00 2001 From: Gaoyao Massimo Hu Date: Tue, 7 May 2024 06:11:02 +0100 Subject: [PATCH] Fix C# Hint NodeType and ResourceType HintString --- .../ScriptPropertiesGenerator.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs index 21223654f366..a25a2c2f68e9 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs @@ -590,6 +590,11 @@ private static bool TryGetMemberExportHint( if (variantType == VariantType.Object && type is INamedTypeSymbol memberNamedType) { + if (TryGetNodeOrResourceType(exportAttr, out hint, out hintString)) + { + return true; + } + if (memberNamedType.InheritsFrom("GodotSharp", "Godot.Resource")) { hint = PropertyHint.ResourceType; @@ -607,6 +612,37 @@ private static bool TryGetMemberExportHint( } } + static bool TryGetNodeOrResourceType(AttributeData exportAttr, out PropertyHint hint, out string? hintString) + { + hint = PropertyHint.None; + hintString = null; + + if (exportAttr.ConstructorArguments.Length <= 1) return false; + + var hintValue = exportAttr.ConstructorArguments[0].Value; + + var hintEnum = hintValue switch + { + null => PropertyHint.None, + int intValue => (PropertyHint)intValue, + _ => (PropertyHint)(long)hintValue + }; + + if (!hintEnum.HasFlag(PropertyHint.NodeType) && !hintEnum.HasFlag(PropertyHint.ResourceType)) + return false; + + var hintStringValue = exportAttr.ConstructorArguments[1].Value?.ToString(); + if (string.IsNullOrWhiteSpace(hintStringValue)) + { + return false; + } + + hint = hintEnum; + hintString = hintStringValue; + + return true; + } + static string GetTypeName(INamedTypeSymbol memberSymbol) { if (memberSymbol.GetAttributes()