From 3e08d377ea71f229f327cbc4fad6f9148ff66577 Mon Sep 17 00:00:00 2001 From: Dongle <29563098+dongle-the-gadget@users.noreply.github.com> Date: Fri, 20 Sep 2024 22:03:36 +0700 Subject: [PATCH 1/3] Allow custom overloads --- src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs b/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs index 2d917b9c4..3dad57da8 100644 --- a/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs +++ b/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs @@ -1567,6 +1567,11 @@ private void AddOverloadAttributeForInterfaceMethods(TypeDeclaration interfaceTy overloadedMethodName = methodName.Key + (++lastSuffix); } + bool alreadyHasOverload = method.TryGetAttributeWithType(Model.Compilation.GetTypeByMetadataName("Windows.Foundation.Metadata.OverloadAttribute"), out AttributeData _); + Logger.Log($"Overload {methodName.Key}: {alreadyHasOverload}"); + if (alreadyHasOverload) + continue; + Logger.Log("Overloading " + methodName.Key + " with " + overloadedMethodName); AddOverloadAttribute(interfaceTypeDeclaration.MethodDefinitions[method].First(), overloadedMethodName); interfaceTypeDeclaration.AddMethodOverload(method, overloadedMethodName); From 9e037b39ed1d4e85434796d2be89c87a9ea04a6a Mon Sep 17 00:00:00 2001 From: Dongle <29563098+dongle-the-gadget@users.noreply.github.com> Date: Fri, 20 Sep 2024 22:04:46 +0700 Subject: [PATCH 2/3] Remove unnecessary log. --- src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs b/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs index 3dad57da8..f8bb318b1 100644 --- a/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs +++ b/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs @@ -1568,7 +1568,6 @@ private void AddOverloadAttributeForInterfaceMethods(TypeDeclaration interfaceTy } bool alreadyHasOverload = method.TryGetAttributeWithType(Model.Compilation.GetTypeByMetadataName("Windows.Foundation.Metadata.OverloadAttribute"), out AttributeData _); - Logger.Log($"Overload {methodName.Key}: {alreadyHasOverload}"); if (alreadyHasOverload) continue; From 04b30c318f6f6ffdef5a25c532372383ce5f70f5 Mon Sep 17 00:00:00 2001 From: Dongle <29563098+dongle-the-gadget@users.noreply.github.com> Date: Fri, 20 Sep 2024 22:16:43 +0700 Subject: [PATCH 3/3] Move overload check to before while loop --- src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs b/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs index f8bb318b1..45eb4a011 100644 --- a/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs +++ b/src/Authoring/WinRT.SourceGenerator/WinRTTypeWriter.cs @@ -1561,16 +1561,16 @@ private void AddOverloadAttributeForInterfaceMethods(TypeDeclaration interfaceTy continue; } + bool alreadyHasOverload = method.TryGetAttributeWithType(Model.Compilation.GetTypeByMetadataName("Windows.Foundation.Metadata.OverloadAttribute"), out AttributeData _); + if (alreadyHasOverload) + continue; + string overloadedMethodName = methodName.Key + (++lastSuffix); while (interfaceTypeDeclaration.MethodsByName.ContainsKey(overloadedMethodName)) { overloadedMethodName = methodName.Key + (++lastSuffix); } - bool alreadyHasOverload = method.TryGetAttributeWithType(Model.Compilation.GetTypeByMetadataName("Windows.Foundation.Metadata.OverloadAttribute"), out AttributeData _); - if (alreadyHasOverload) - continue; - Logger.Log("Overloading " + methodName.Key + " with " + overloadedMethodName); AddOverloadAttribute(interfaceTypeDeclaration.MethodDefinitions[method].First(), overloadedMethodName); interfaceTypeDeclaration.AddMethodOverload(method, overloadedMethodName);