Jelajahi Sumber

Fix nested GodotObject class in generic class lead to source generator errors in C#

2750558108 7 bulan lalu
induk
melakukan
6a56ed8926

+ 15 - 0
modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/NestedInGenericTest.cs

@@ -0,0 +1,15 @@
+using Xunit;
+
+namespace Godot.SourceGenerators.Tests;
+
+public class NestedInGenericTest
+{
+    [Fact]
+    public async void GenerateScriptMethodsTest()
+    {
+        await CSharpSourceGeneratorVerifier<ScriptMethodsGenerator>.Verify(
+            "NestedInGeneric.cs",
+            "GenericClass(Of T).NestedClass_ScriptMethods.generated.cs"
+        );
+    }
+}

+ 16 - 0
modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/GenericClass(Of T).NestedClass_ScriptMethods.generated.cs

@@ -0,0 +1,16 @@
+using Godot;
+using Godot.NativeInterop;
+
+partial class GenericClass<T>
+{
+partial class NestedClass
+{
+#pragma warning disable CS0109 // Disable warning about redundant 'new' keyword
+    /// <summary>
+    /// Cached StringNames for the methods contained in this class, for fast lookup.
+    /// </summary>
+    public new class MethodName : global::Godot.GodotObject.MethodName {
+    }
+#pragma warning restore CS0109
+}
+}

+ 9 - 0
modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/Sources/NestedInGeneric.cs

@@ -0,0 +1,9 @@
+using Godot;
+
+public partial class GenericClass<T>
+{
+	public partial class NestedClass : GodotObject
+	{
+
+	}
+}

+ 1 - 1
modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs

@@ -183,7 +183,7 @@ namespace Godot.SourceGenerators
 
         public static string NameWithTypeParameters(this INamedTypeSymbol symbol)
         {
-            return symbol.IsGenericType ?
+            return symbol.IsGenericType && symbol.TypeParameters.Length > 0 ?
                 string.Concat(symbol.Name, "<", string.Join(", ", symbol.TypeParameters), ">") :
                 symbol.Name;
         }

+ 1 - 1
modules/mono/glue/GodotSharp/Godot.SourceGenerators.Internal/ExtensionMethods.cs

@@ -96,7 +96,7 @@ internal static class ExtensionMethods
 
     public static string NameWithTypeParameters(this INamedTypeSymbol symbol)
     {
-        return symbol.IsGenericType ?
+        return symbol.IsGenericType && symbol.TypeParameters.Length > 0 ?
             string.Concat(symbol.Name, "<", string.Join(", ", symbol.TypeParameters), ">") :
             symbol.Name;
     }