From b3822e88aa6b5cdfec79a32595039f0edb934f9f Mon Sep 17 00:00:00 2001 From: Kieron Lanning Date: Sun, 20 Sep 2026 12:20:15 +0100 Subject: [PATCH] fix: attribute properties were get only with no ctor --- package.json | 4 ++-- src/src/SourceGenerator/Common/TypeLibrarySpec.cs | 12 ++++++++++++ .../ValueObject/ComplexValueObjectEmitter.cs | 8 ++++---- .../ValueObject/ScalarValueObjectEmitter.cs | 13 +++++-------- .../ValueObject/ValueObjectsAttributeEmitter.cs | 9 ++++++++- src/src/ValueObjects/Properties/AssemblyInfo.cs | 1 - .../SourceGenerator.UnitTests/Common/TypeRefs.cs | 4 ++-- 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index a7a1778..a9bba48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "purview-value-objects", - "version": "1.0.0-prerelease.3", + "version": "1.0.0-prerelease.4", "license": "MIT", "author": { "name": "Kieron Lanning", @@ -14,4 +14,4 @@ "type": "git", "url": "git+https://github.com/purview-dev/value-objects.git" } -} \ No newline at end of file +} diff --git a/src/src/SourceGenerator/Common/TypeLibrarySpec.cs b/src/src/SourceGenerator/Common/TypeLibrarySpec.cs index e418c5f..e7aa9a3 100644 --- a/src/src/SourceGenerator/Common/TypeLibrarySpec.cs +++ b/src/src/SourceGenerator/Common/TypeLibrarySpec.cs @@ -8,6 +8,12 @@ namespace Purview.ValueObjects.SourceGenerator.Common; [GenerateTypeLibrary(ClassName = "TypeLibrary", Namespace = "Purview.ValueObjects.SourceGenerator.Common")] static partial class TypeLibrarySpec { + [TypeRef("Purview.ValueObjects")] + static readonly TypeIdentity IValueObject = default; + + [TypeRef("Purview.ValueObjects")] + static readonly TypeIdentity IScalarValueObject = default; + [TypeRef("Purview.ValueObjects.Serialization")] static readonly TypeIdentity ScalarAttribute = default; @@ -26,6 +32,12 @@ static partial class TypeLibrarySpec [TypeRef("System")] static readonly TypeIdentity Guid = default; + [TypeRef("System")] + static readonly TypeIdentity IEquatable = default; + + [TypeRef("System")] + static readonly TypeIdentity IComparable = default; + [TypeRef("System.Text.Json")] static readonly TypeIdentity JsonSerializer = default; diff --git a/src/src/SourceGenerator/ValueObject/ComplexValueObjectEmitter.cs b/src/src/SourceGenerator/ValueObject/ComplexValueObjectEmitter.cs index e33297c..f89a30f 100644 --- a/src/src/SourceGenerator/ValueObject/ComplexValueObjectEmitter.cs +++ b/src/src/SourceGenerator/ValueObject/ComplexValueObjectEmitter.cs @@ -69,13 +69,13 @@ static ImmutableArray BuildInterfaces(ComplexValueObjectModel mod var valueObjectType = ValueObjectType(model); var builder = ImmutableArray.CreateBuilder(); - builder.Add(new TypeIdentity("IValueObject", "Purview.ValueObjects").MakeGeneric(valueObjectType)); + builder.Add(TypeLibrary.Purview.ValueObjects.IValueObject.MakeGeneric(valueObjectType)); if (!model.IsReferenceType && !model.ImplementsSelfEquatable) - builder.Add(new TypeIdentity("IEquatable", "System").MakeGeneric(valueObjectType)); + builder.Add(TypeLibrary.System.IEquatable.MakeGeneric(valueObjectType)); - builder.Add(new TypeIdentity("IComparable", "System").MakeGeneric(valueObjectType)); - builder.Add(new TypeIdentity("IComparable", "System")); + builder.Add(TypeLibrary.System.IComparable.MakeGeneric(valueObjectType)); + builder.Add(TypeLibrary.System.IComparable); return builder.ToImmutable(); } diff --git a/src/src/SourceGenerator/ValueObject/ScalarValueObjectEmitter.cs b/src/src/SourceGenerator/ValueObject/ScalarValueObjectEmitter.cs index 0bfd14a..729b463 100644 --- a/src/src/SourceGenerator/ValueObject/ScalarValueObjectEmitter.cs +++ b/src/src/SourceGenerator/ValueObject/ScalarValueObjectEmitter.cs @@ -71,18 +71,15 @@ static ImmutableArray BuildInterfaces(ScalarValueObjectModel mode var builder = ImmutableArray.CreateBuilder(); builder.Add( - new TypeIdentity("IScalarValueObject", "Purview.ValueObjects").MakeGeneric( - valueObjectType, - model.ScalarTypeReference - ) + TypeLibrary.Purview.ValueObjects.IScalarValueObject.MakeGeneric(valueObjectType, model.ScalarTypeReference) ); if (!model.IsReferenceType && !model.ImplementsSelfEquatable) - builder.Add(new TypeIdentity("IEquatable", "System").MakeGeneric(valueObjectType)); + builder.Add(TypeLibrary.System.IEquatable.MakeGeneric(valueObjectType)); - builder.Add(new TypeIdentity("IComparable", "System").MakeGeneric(valueObjectType)); - builder.Add(new TypeIdentity("IComparable", "System").MakeGeneric(model.ScalarTypeReference)); - builder.Add(new TypeIdentity("IComparable", "System")); + builder.Add(TypeLibrary.System.IComparable.MakeGeneric(valueObjectType)); + builder.Add(TypeLibrary.System.IComparable.MakeGeneric(model.ScalarTypeReference)); + builder.Add(TypeLibrary.System.IComparable); return builder.ToImmutable(); } diff --git a/src/src/SourceGenerator/ValueObject/ValueObjectsAttributeEmitter.cs b/src/src/SourceGenerator/ValueObject/ValueObjectsAttributeEmitter.cs index 9a01a85..155ab6b 100644 --- a/src/src/SourceGenerator/ValueObject/ValueObjectsAttributeEmitter.cs +++ b/src/src/SourceGenerator/ValueObject/ValueObjectsAttributeEmitter.cs @@ -104,6 +104,7 @@ static void EmitBoolProperty(CodeWriter bodyWriter, string name, params string[] .Property( new(name, PurviewTypeLibrary.System.Boolean, TypeDeclarationAccessibility.Public) { + IsInitOnly = true, Initializer = "true", } ); @@ -119,7 +120,13 @@ params string[] summary { bodyWriter .XmlSummary([.. summary, $"Default: {defaultValue.Split('.').Last()}"]) - .Property(new(name, enumType, TypeDeclarationAccessibility.Public) { Initializer = defaultValue }); + .Property( + new(name, enumType, TypeDeclarationAccessibility.Public) + { + IsInitOnly = true, + Initializer = defaultValue, + } + ); } static CodeWriter GetCodeWriter() diff --git a/src/src/ValueObjects/Properties/AssemblyInfo.cs b/src/src/ValueObjects/Properties/AssemblyInfo.cs index 560d711..95fb40c 100644 --- a/src/src/ValueObjects/Properties/AssemblyInfo.cs +++ b/src/src/ValueObjects/Properties/AssemblyInfo.cs @@ -1,4 +1,3 @@ using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("ValueObjects.UnitTests")] [assembly: InternalsVisibleTo("SourceGenerator.UnitTests")] diff --git a/src/tests/SourceGenerator.UnitTests/Common/TypeRefs.cs b/src/tests/SourceGenerator.UnitTests/Common/TypeRefs.cs index 1e12536..1fa470e 100644 --- a/src/tests/SourceGenerator.UnitTests/Common/TypeRefs.cs +++ b/src/tests/SourceGenerator.UnitTests/Common/TypeRefs.cs @@ -26,8 +26,8 @@ static class TypeRefs public static TypeReference Named(string name, string @namespace) => new(new TypeIdentity(name, @namespace)); public static TypeReference EnumerableOf(TypeReference element) => - new(new TypeIdentity("IEnumerable", "System.Collections.Generic").MakeGeneric(element)); + new(TypeLibrary.System.Collections.Generic.IEnumerable.MakeGeneric(element)); public static TypeReference ICollectionOf(TypeReference element) => - new(new TypeIdentity("ICollection", "System.Collections.Generic").MakeGeneric(element)); + new(TypeLibrary.System.Collections.Generic.ICollection.MakeGeneric(element)); }