summaryrefslogtreecommitdiffstats
path: root/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs')
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs36
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()