From bb13320be02ad53ff5b3318a1fc91de38500172a Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Mon, 9 Dec 2024 22:06:08 +0000 Subject: [PATCH] Fix source generator including unused unsafe accessors (#75) --- .../SourceFormatter/SourceFormatter.Object.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/PolyType.SourceGenerator/SourceFormatter/SourceFormatter.Object.cs b/src/PolyType.SourceGenerator/SourceFormatter/SourceFormatter.Object.cs index e7936a1..a181a7c 100644 --- a/src/PolyType.SourceGenerator/SourceFormatter/SourceFormatter.Object.cs +++ b/src/PolyType.SourceGenerator/SourceFormatter/SourceFormatter.Object.cs @@ -59,12 +59,30 @@ private static void FormatMemberAccessors(SourceWriter writer, ObjectShapeModel FormatPropertyGetterAccessor(writer, objectShapeModel, property); } - if (property is { EmitSetter: true, IsSetterAccessible: false } || - (objectShapeModel.Constructor is not null && property.IsInitOnly)) + if ((!property.IsSetterAccessible || property.IsInitOnly) && + (property.EmitSetter || IsUsedByConstructor(property))) { writer.WriteLine(); FormatPropertySetterAccessor(writer, objectShapeModel, property); } + + bool IsUsedByConstructor(PropertyShapeModel property) + { + if (objectShapeModel.Constructor is not {} ctor) + { + return false; + } + + foreach (var parameter in ctor.RequiredMembers.Concat(ctor.OptionalMembers)) + { + if (parameter.Name == property.Name) + { + return true; + } + } + + return false; + } } }