From 6bcf8203753117cfffb4b9a0eaa8d96aa2f3f53f Mon Sep 17 00:00:00 2001 From: Don Olmstead Date: Tue, 18 Aug 2026 14:49:47 -0700 Subject: [PATCH] Support primary constructors Change the check for the `_` value constructor to support `new _()`. --- CHANGELOG.md | 6 +++++- built_value_generator/lib/src/value_source_class.dart | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56236f4a..08818e18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +# 8.12.8 + +- Support generating from classes using primary constructors. + # 8.12.7 - Allow `analyzer 13.0.0` and `analyzer 14.0.0` @@ -200,7 +204,7 @@ # 8.3.1 -- Fix generation support for optional generic bounds, e.g. +- Fix generation support for optional generic bounds, e.g. `class Foo`. - Fix generation for classes with names starting `$`. - Ignore lint `unnecessary_lambdas` in generated code. diff --git a/built_value_generator/lib/src/value_source_class.dart b/built_value_generator/lib/src/value_source_class.dart index bc187535..d125625c 100644 --- a/built_value_generator/lib/src/value_source_class.dart +++ b/built_value_generator/lib/src/value_source_class.dart @@ -669,6 +669,11 @@ abstract class ValueSourceClass } final expectedConstructor = '$name._()'; + bool constructorCheck(ConstructorDeclaration c) { + final check = c.typeName != null ? expectedConstructor : '_()'; + return c.toSource().contains(check); + } + if (valueClassConstructors.isEmpty) { result.add( GeneratorError( @@ -683,7 +688,7 @@ abstract class ValueSourceClass } else if (valueClassConstructors.length > 1) { var found = false; for (var constructor in valueClassConstructors) { - if (constructor.toSource().contains(expectedConstructor)) { + if (constructorCheck(constructor)) { found = true; } else { result.add( @@ -709,9 +714,7 @@ abstract class ValueSourceClass ), ); } - } else if (!(valueClassConstructors.single.toSource().contains( - expectedConstructor, - ))) { + } else if (!constructorCheck(valueClassConstructors.single)) { result.add( GeneratorError( (b) => b