diff options
author | Gaoyao Massimo Hu <ghzero97@gmail.com> | 2024-05-07 06:11:02 +0100 |
---|---|---|
committer | Gaoyao Massimo Hu <ghzero97@gmail.com> | 2024-05-08 16:22:52 +0100 |
commit | 06b716d8b35c9bcaf0efb8da4ee696d0c6d31223 (patch) | |
tree | d96f0c5e35d6028b44695a42b04b23bc73f8091e | |
parent | 2042420bd7f43bb834316d7ca4631ab2fcfcc820 (diff) | |
download | redot-engine-06b716d8b35c9bcaf0efb8da4ee696d0c6d31223.tar.gz |
Fix C# Hint NodeType and ResourceType HintString
-rw-r--r-- | modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs | 36 |
1 files changed, 36 insertions, 0 deletions
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 21223654f3..a25a2c2f68 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 @@ namespace Godot.SourceGenerators 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 @@ namespace Godot.SourceGenerators } } + 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() |