From 82c15c4797ecccecbaddf00c0d502d446469551c Mon Sep 17 00:00:00 2001 From: badcel <1218031+badcel@users.noreply.github.com> Date: Thu, 31 Oct 2024 20:45:24 +0100 Subject: [PATCH 1/5] Update gir files to GNOME 47 --- ext/gir-files | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/gir-files b/ext/gir-files index c2dab7dee..b26a5ec2c 160000 --- a/ext/gir-files +++ b/ext/gir-files @@ -1 +1 @@ -Subproject commit c2dab7dee23d5b5aa29bfb43c9191412cef65f59 +Subproject commit b26a5ec2cf134da67a9284dc483bf089d0c6b56c From 3599ea214a35a280a0406f53e2767f3178356dab Mon Sep 17 00:00:00 2001 From: badcel <1218031+badcel@users.noreply.github.com> Date: Thu, 31 Oct 2024 21:20:52 +0100 Subject: [PATCH 2/5] Support disabling types This disables Win32NetworkMonitor and Win32NetworkMonitorClass as those types reference undefined base types which can't be resolved by the generator. --- .../Fixer/Record/DisableBrokenTypes.cs | 17 ++++++++++++++ src/Generation/Generator/Fixer/Records.cs | 7 +++--- .../Generator/Internal/TypedRecord.cs | 14 +++++------- .../Generator/Internal/TypedRecordData.cs | 14 +++++------- .../Internal/TypedRecordDelegates.cs | 14 +++++------- .../Generator/Internal/TypedRecordHandle.cs | 14 +++++------- .../Generator/Internal/UntypedRecord.cs | 14 +++++------- .../Generator/Internal/UntypedRecordData.cs | 14 +++++------- .../Generator/Internal/UntypedRecordHandle.cs | 14 +++++------- .../Generator/Generator/Public/TypedRecord.cs | 14 +++++------- .../Generator/Public/UntypedRecord.cs | 14 +++++------- .../Generator/Model/Type.Disable.cs | 22 +++++++++++++++++++ src/Generation/Generator/Model/Type.cs | 2 +- 13 files changed, 89 insertions(+), 85 deletions(-) create mode 100644 src/Generation/Generator/Fixer/Record/DisableBrokenTypes.cs create mode 100644 src/Generation/Generator/Model/Type.Disable.cs diff --git a/src/Generation/Generator/Fixer/Record/DisableBrokenTypes.cs b/src/Generation/Generator/Fixer/Record/DisableBrokenTypes.cs new file mode 100644 index 000000000..ee65ff45b --- /dev/null +++ b/src/Generation/Generator/Fixer/Record/DisableBrokenTypes.cs @@ -0,0 +1,17 @@ +using Generator.Model; + +namespace Generator.Fixer.Record; + +internal class DisableBrokenTypes : Fixer +{ + public void Fixup(GirModel.Record record) + { + switch (record.Name) + { + case "Win32NetworkMonitor": + case "Win32NetworkMonitorClass": + Type.Disable(record); + break; + } + } +} diff --git a/src/Generation/Generator/Fixer/Records.cs b/src/Generation/Generator/Fixer/Records.cs index 892b570f3..447b8a494 100644 --- a/src/Generation/Generator/Fixer/Records.cs +++ b/src/Generation/Generator/Fixer/Records.cs @@ -5,13 +5,14 @@ namespace Generator.Fixer; public static class Records { - private static readonly List> Fixers = new() - { + private static readonly List> Fixers = + [ + new DisableBrokenTypes(), new InternalMethodsNamedLikeRecordFixer(), new MethodWithInOutInstanceParameterFixer(), new PublicMethodsColldingWithFieldFixer(), new RecordEqualsMethodCollidesWithGeneratedCode() - }; + ]; public static void Fixup(IEnumerable records) { diff --git a/src/Generation/Generator/Generator/Internal/TypedRecord.cs b/src/Generation/Generator/Generator/Internal/TypedRecord.cs index 2176dc1f0..a673678dd 100644 --- a/src/Generation/Generator/Generator/Internal/TypedRecord.cs +++ b/src/Generation/Generator/Generator/Internal/TypedRecord.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Internal; -internal class TypedRecord : Generator +internal class TypedRecord(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public TypedRecord(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record obj) { if (!Record.IsTyped(obj)) return; + if (!Type.IsEnabled(obj)) + return; + var source = Renderer.Internal.TypedRecord.Render(obj); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(obj.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record obj) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Internal/TypedRecordData.cs b/src/Generation/Generator/Generator/Internal/TypedRecordData.cs index 77f95a5ef..d8752a94d 100644 --- a/src/Generation/Generator/Generator/Internal/TypedRecordData.cs +++ b/src/Generation/Generator/Generator/Internal/TypedRecordData.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Internal; -internal class TypedRecordData : Generator +internal class TypedRecordData(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public TypedRecordData(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record obj) { if (!Record.IsTyped(obj)) return; + if (!Type.IsEnabled(obj)) + return; + var source = Renderer.Internal.TypedRecordData.Render(obj); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(obj.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record obj) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Internal/TypedRecordDelegates.cs b/src/Generation/Generator/Generator/Internal/TypedRecordDelegates.cs index 9e1414b63..4c3c162f2 100644 --- a/src/Generation/Generator/Generator/Internal/TypedRecordDelegates.cs +++ b/src/Generation/Generator/Generator/Internal/TypedRecordDelegates.cs @@ -3,15 +3,8 @@ namespace Generator.Generator.Internal; -internal class TypedRecordDelegates : Generator +internal class TypedRecordDelegates(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public TypedRecordDelegates(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record record) { if (!Record.IsTyped(record)) @@ -20,6 +13,9 @@ public void Generate(GirModel.Record record) if (!record.Fields.Any(field => field.AnyTypeOrCallback.IsT1)) return; + if (!Type.IsEnabled(record)) + return; + var source = Renderer.Internal.TypedRecordDelegates.Render(record); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(record.Namespace), @@ -28,6 +24,6 @@ public void Generate(GirModel.Record record) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Internal/TypedRecordHandle.cs b/src/Generation/Generator/Generator/Internal/TypedRecordHandle.cs index 313e53964..2b4784294 100644 --- a/src/Generation/Generator/Generator/Internal/TypedRecordHandle.cs +++ b/src/Generation/Generator/Generator/Internal/TypedRecordHandle.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Internal; -internal class TypedRecordHandle : Generator +internal class TypedRecordHandle(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public TypedRecordHandle(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record obj) { if (!Record.IsTyped(obj)) return; + if (!Type.IsEnabled(obj)) + return; + var source = Renderer.Internal.TypedRecordHandle.Render(obj); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(obj.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record obj) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Internal/UntypedRecord.cs b/src/Generation/Generator/Generator/Internal/UntypedRecord.cs index 97960e5a0..d01d79c16 100644 --- a/src/Generation/Generator/Generator/Internal/UntypedRecord.cs +++ b/src/Generation/Generator/Generator/Internal/UntypedRecord.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Internal; -internal class UntypedRecord : Generator +internal class UntypedRecord(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public UntypedRecord(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record obj) { if (!Record.IsUntyped(obj)) return; + if (!Type.IsEnabled(obj)) + return; + var source = Renderer.Internal.UntypedRecord.Render(obj); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(obj.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record obj) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Internal/UntypedRecordData.cs b/src/Generation/Generator/Generator/Internal/UntypedRecordData.cs index ca336396a..fee9440dc 100644 --- a/src/Generation/Generator/Generator/Internal/UntypedRecordData.cs +++ b/src/Generation/Generator/Generator/Internal/UntypedRecordData.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Internal; -internal class UntypedRecordData : Generator +internal class UntypedRecordData(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public UntypedRecordData(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record obj) { if (!Record.IsUntyped(obj)) return; + if (!Type.IsEnabled(obj)) + return; + var source = Renderer.Internal.UntypedRecordData.Render(obj); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(obj.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record obj) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Internal/UntypedRecordHandle.cs b/src/Generation/Generator/Generator/Internal/UntypedRecordHandle.cs index 20ed8c198..b28f1c1e1 100644 --- a/src/Generation/Generator/Generator/Internal/UntypedRecordHandle.cs +++ b/src/Generation/Generator/Generator/Internal/UntypedRecordHandle.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Internal; -internal class UntypedRecordHandle : Generator +internal class UntypedRecordHandle(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public UntypedRecordHandle(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record obj) { if (!Record.IsUntyped(obj)) return; + if (!Type.IsEnabled(obj)) + return; + var source = Renderer.Internal.UntypedRecordHandle.Render(obj); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(obj.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record obj) IsInternal: true ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Public/TypedRecord.cs b/src/Generation/Generator/Generator/Public/TypedRecord.cs index d8880ac1c..ef7fb701c 100644 --- a/src/Generation/Generator/Generator/Public/TypedRecord.cs +++ b/src/Generation/Generator/Generator/Public/TypedRecord.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Public; -internal class TypedRecord : Generator +internal class TypedRecord(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public TypedRecord(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record record) { if (!Record.IsTyped(record)) return; + if (!Type.IsEnabled(record)) + return; + var source = Renderer.Public.TypedRecord.Render(record); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(record.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record record) IsInternal: false ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Generator/Public/UntypedRecord.cs b/src/Generation/Generator/Generator/Public/UntypedRecord.cs index 878b0d7c9..d88a1d927 100644 --- a/src/Generation/Generator/Generator/Public/UntypedRecord.cs +++ b/src/Generation/Generator/Generator/Public/UntypedRecord.cs @@ -2,20 +2,16 @@ namespace Generator.Generator.Public; -internal class UntypedRecord : Generator +internal class UntypedRecord(Publisher publisher) : Generator { - private readonly Publisher _publisher; - - public UntypedRecord(Publisher publisher) - { - _publisher = publisher; - } - public void Generate(GirModel.Record record) { if (!Record.IsUntyped(record)) return; + if (!Type.IsEnabled(record)) + return; + var source = Renderer.Public.UntypedRecord.Render(record); var codeUnit = new CodeUnit( Project: Namespace.GetCanonicalName(record.Namespace), @@ -24,6 +20,6 @@ public void Generate(GirModel.Record record) IsInternal: false ); - _publisher.Publish(codeUnit); + publisher.Publish(codeUnit); } } diff --git a/src/Generation/Generator/Model/Type.Disable.cs b/src/Generation/Generator/Model/Type.Disable.cs new file mode 100644 index 000000000..570c6aa43 --- /dev/null +++ b/src/Generation/Generator/Model/Type.Disable.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace Generator.Model; + +internal static partial class Type +{ + private static readonly HashSet Disabled = new(); + + public static void Disable(GirModel.Type type) + { + lock (Disabled) + { + Disabled.Add(type); + } + } + + public static bool IsEnabled(GirModel.Type type) + { + //Does not need a lock as it is called only after all insertions are done. + return !Disabled.Contains(type); + } +} diff --git a/src/Generation/Generator/Model/Type.cs b/src/Generation/Generator/Model/Type.cs index 02e51a810..9e4526348 100644 --- a/src/Generation/Generator/Model/Type.cs +++ b/src/Generation/Generator/Model/Type.cs @@ -2,7 +2,7 @@ namespace Generator.Model; -internal static class Type +internal static partial class Type { public const string Pointer = "IntPtr"; public const string PointerArray = "IntPtr[]"; From 38e145d3fa5059f19bf1462a790c1c88a2f149eb Mon Sep 17 00:00:00 2001 From: badcel <1218031+badcel@users.noreply.github.com> Date: Thu, 31 Oct 2024 21:33:30 +0100 Subject: [PATCH 3/5] GLib: Remove manual written code Equivalent code gets generated automatically due to upstream updates. --- .../GLib-2.0/Internal/AsyncQueueHandle.cs | 37 ------------------- src/Libs/GLib-2.0/Internal/VariantHandle.cs | 37 ------------------- src/Libs/GLib-2.0/Public/Variant.cs | 12 ------ 3 files changed, 86 deletions(-) delete mode 100644 src/Libs/GLib-2.0/Internal/AsyncQueueHandle.cs delete mode 100644 src/Libs/GLib-2.0/Internal/VariantHandle.cs delete mode 100644 src/Libs/GLib-2.0/Public/Variant.cs diff --git a/src/Libs/GLib-2.0/Internal/AsyncQueueHandle.cs b/src/Libs/GLib-2.0/Internal/AsyncQueueHandle.cs deleted file mode 100644 index 961bae487..000000000 --- a/src/Libs/GLib-2.0/Internal/AsyncQueueHandle.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace GLib.Internal; - -public partial class AsyncQueueHandle -{ - [DllImport(ImportResolver.Library, EntryPoint = "g_async_queue_ref")] - protected static extern IntPtr Ref(IntPtr queue); - - public partial AsyncQueueOwnedHandle OwnedCopy() - { - return new AsyncQueueOwnedHandle(Ref(handle)); - } - - public partial AsyncQueueUnownedHandle UnownedCopy() - { - return new AsyncQueueUnownedHandle(Ref(handle)); - } -} - -public partial class AsyncQueueOwnedHandle -{ - [DllImport(ImportResolver.Library, EntryPoint = "g_async_queue_unref")] - private static extern void Unref(IntPtr queue); - - public static partial AsyncQueueOwnedHandle FromUnowned(IntPtr ptr) - { - return new AsyncQueueOwnedHandle(Ref(ptr)); - } - - protected override partial bool ReleaseHandle() - { - Unref(handle); - return true; - } -} diff --git a/src/Libs/GLib-2.0/Internal/VariantHandle.cs b/src/Libs/GLib-2.0/Internal/VariantHandle.cs deleted file mode 100644 index 7f29c5ccb..000000000 --- a/src/Libs/GLib-2.0/Internal/VariantHandle.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace GLib.Internal; - -public abstract partial class VariantHandle -{ - [DllImport(ImportResolver.Library, EntryPoint = "g_variant_ref_sink")] - protected static extern IntPtr RefSink(IntPtr value); - - public partial VariantOwnedHandle OwnedCopy() - { - return new VariantOwnedHandle(RefSink(handle)); - } - - public partial VariantUnownedHandle UnownedCopy() - { - return new VariantUnownedHandle(RefSink(handle)); - } -} - -public partial class VariantOwnedHandle -{ - [DllImport(ImportResolver.Library, EntryPoint = "g_variant_unref")] - private static extern void Unref(IntPtr value); - - public static partial VariantOwnedHandle FromUnowned(IntPtr ptr) - { - return new VariantOwnedHandle(RefSink(ptr)); - } - - protected override partial bool ReleaseHandle() - { - Unref(handle); - return true; - } -} diff --git a/src/Libs/GLib-2.0/Public/Variant.cs b/src/Libs/GLib-2.0/Public/Variant.cs deleted file mode 100644 index 2234d4dde..000000000 --- a/src/Libs/GLib-2.0/Public/Variant.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using GLib.Internal; - -namespace GLib; - -public partial class Variant : IDisposable -{ - public void Dispose() - { - Handle.Dispose(); - } -} From d4d6ce0d1d5033e28d5757e686a540a57f58d99c Mon Sep 17 00:00:00 2001 From: badcel <1218031+badcel@users.noreply.github.com> Date: Thu, 31 Oct 2024 21:38:43 +0100 Subject: [PATCH 4/5] Generator: Make constructor variable more unique There is some api naming a constructor parameter "handle" which leads to an ambitious variable name. --- .../Renderer/Public/Constructor/ConstructorRenderer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Generation/Generator/Renderer/Public/Constructor/ConstructorRenderer.cs b/src/Generation/Generator/Renderer/Public/Constructor/ConstructorRenderer.cs index 984f94d6e..a2c1f3a2b 100644 --- a/src/Generation/Generator/Renderer/Public/Constructor/ConstructorRenderer.cs +++ b/src/Generation/Generator/Renderer/Public/Constructor/ConstructorRenderer.cs @@ -94,7 +94,7 @@ private static string RenderContent(IEnumerable parameter private static string RenderCallStatement(GirModel.Constructor constructor, IEnumerable parameters, Constructor.ConstructorData data) { - var variableName = "handle"; + var variableName = $"{constructor.Parent.Name.ToLower()}Handle"; var call = new StringBuilder(); call.Append($"var {variableName} = Internal.{constructor.Parent.Name}.{Model.Constructor.GetName(constructor)}("); call.Append(string.Join(", ", parameters.Select(x => x.GetCallName()))); From ae2b0863edcf9645381398bd397dbd7ac57655e3 Mon Sep 17 00:00:00 2001 From: badcel <1218031+badcel@users.noreply.github.com> Date: Thu, 31 Oct 2024 21:45:39 +0100 Subject: [PATCH 5/5] Gdk: Remove handles which get rendered automatically --- .../Gdk-4.0/Internal/DragSurfaceSizeHandle.cs | 29 ------------------- .../Gdk-4.0/Internal/ToplevelSizeHandle.cs | 29 ------------------- 2 files changed, 58 deletions(-) delete mode 100644 src/Libs/Gdk-4.0/Internal/DragSurfaceSizeHandle.cs delete mode 100644 src/Libs/Gdk-4.0/Internal/ToplevelSizeHandle.cs diff --git a/src/Libs/Gdk-4.0/Internal/DragSurfaceSizeHandle.cs b/src/Libs/Gdk-4.0/Internal/DragSurfaceSizeHandle.cs deleted file mode 100644 index fc130bd23..000000000 --- a/src/Libs/Gdk-4.0/Internal/DragSurfaceSizeHandle.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -namespace Gdk.Internal; - -public partial class DragSurfaceSizeHandle -{ - public partial DragSurfaceSizeOwnedHandle OwnedCopy() - { - throw new NotImplementedException(); - } - - public partial DragSurfaceSizeUnownedHandle UnownedCopy() - { - throw new NotImplementedException(); - } -} - -public partial class DragSurfaceSizeOwnedHandle -{ - public static partial DragSurfaceSizeOwnedHandle FromUnowned(IntPtr ptr) - { - throw new NotImplementedException(); - } - - protected override partial bool ReleaseHandle() - { - throw new NotImplementedException(); - } -} diff --git a/src/Libs/Gdk-4.0/Internal/ToplevelSizeHandle.cs b/src/Libs/Gdk-4.0/Internal/ToplevelSizeHandle.cs deleted file mode 100644 index 1ca25fe72..000000000 --- a/src/Libs/Gdk-4.0/Internal/ToplevelSizeHandle.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -namespace Gdk.Internal; - -public abstract partial class ToplevelSizeHandle -{ - public partial ToplevelSizeOwnedHandle OwnedCopy() - { - throw new NotSupportedException("Can't create a copy of this handle"); - } - - public partial ToplevelSizeUnownedHandle UnownedCopy() - { - throw new NotSupportedException("Can't create a copy of this handle"); - } -} - -public partial class ToplevelSizeOwnedHandle -{ - public static partial ToplevelSizeOwnedHandle FromUnowned(IntPtr ptr) - { - throw new NotSupportedException("Can't create a copy of this handle"); - } - - protected override partial bool ReleaseHandle() - { - throw new NotSupportedException("Can't create a copy of this handle"); - } -}