From 9c99e519c61323f0972fb0aa4b3c59cb889ee970 Mon Sep 17 00:00:00 2001 From: Zae Date: Fri, 11 Oct 2024 03:03:05 +0800 Subject: C#: Fix unhandled GD0303 error for nested generic attribute types --- .../TestData/Sources/MustBeVariant.GD0301.cs | 13 +++++++++++++ .../Godot.SourceGenerators/MustBeVariantAnalyzer.cs | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'modules') diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/Sources/MustBeVariant.GD0301.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/Sources/MustBeVariant.GD0301.cs index 053ae36ae7..5654060d38 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/Sources/MustBeVariant.GD0301.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/Sources/MustBeVariant.GD0301.cs @@ -395,6 +395,11 @@ public class MustBeVariantAnnotatedMethods public void MethodWithWrongAttribute() { } + + [NestedGenericTypeAttributeContainer.NestedGenericTypeAttribute()] + public void MethodWithNestedAttribute() + { + } } [GenericTypeAttribute()] @@ -657,3 +662,11 @@ public class ClassNonVariantAnnotated public class GenericTypeAttribute<[MustBeVariant] T> : Attribute { } + +public class NestedGenericTypeAttributeContainer +{ + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class NestedGenericTypeAttribute<[MustBeVariant] T> : Attribute + { + } +} diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MustBeVariantAnalyzer.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MustBeVariantAnalyzer.cs index e894e7a86c..a72a8c5880 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MustBeVariantAnalyzer.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MustBeVariantAnalyzer.cs @@ -135,7 +135,7 @@ namespace Godot.SourceGenerators { ITypeParameterSymbol? typeParamSymbol = parentSymbol switch { - IMethodSymbol methodSymbol when parentSyntax.Parent is AttributeSyntax && + IMethodSymbol methodSymbol when parentSyntax.Ancestors().Any(s => s is AttributeSyntax) && methodSymbol.ContainingType.TypeParameters.Length > 0 => methodSymbol.ContainingType.TypeParameters[typeArgumentIndex], -- cgit v1.2.3