Fix C# Hint NodeType and ResourceType HintString

This commit is contained in:
Gaoyao Massimo Hu 2024-05-07 06:11:02 +01:00
parent 2042420bd7
commit 06b716d8b3
No known key found for this signature in database
GPG key ID: E3A9EE580E0CB24C

View file

@ -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()