Support newInstanceNamed with empty name (#1194)
Co-authored-by: Moritz <mosum@google.com>
diff --git a/pkgs/code_builder/CHANGELOG.md b/pkgs/code_builder/CHANGELOG.md
index 471f72f..1d86e5c 100644
--- a/pkgs/code_builder/CHANGELOG.md
+++ b/pkgs/code_builder/CHANGELOG.md
@@ -2,6 +2,7 @@
* Upgrade `dart_style` and `source_gen` to remove `package:macros` dependency.
* Require Dart `^3.6.0` due to the upgrades.
+* Support `Expression.newInstanceNamed` with empty name
## 4.10.1
diff --git a/pkgs/code_builder/lib/src/specs/expression.dart b/pkgs/code_builder/lib/src/specs/expression.dart
index b9193e6..aa06de2 100644
--- a/pkgs/code_builder/lib/src/specs/expression.dart
+++ b/pkgs/code_builder/lib/src/specs/expression.dart
@@ -578,10 +578,10 @@
final out = output ??= StringBuffer();
return _writeConstExpression(out, expression.isConst, () {
expression.target.accept(this, out);
- if (expression.name != null) {
+ if (expression.name case final name? when name.isNotEmpty) {
out
..write('.')
- ..write(expression.name);
+ ..write(name);
}
if (expression.typeArguments.isNotEmpty) {
out.write('<');
diff --git a/pkgs/code_builder/test/specs/code/expression_test.dart b/pkgs/code_builder/test/specs/code/expression_test.dart
index 4ce9eba..7a424fd 100644
--- a/pkgs/code_builder/test/specs/code/expression_test.dart
+++ b/pkgs/code_builder/test/specs/code/expression_test.dart
@@ -251,6 +251,13 @@
);
});
+ test('should emit invoking unnamed constructor when name is empty', () {
+ expect(
+ refer('Foo').newInstanceNamed('', []),
+ equalsDart('Foo()'),
+ );
+ });
+
test('should emit invoking const Type()', () {
expect(
refer('Object').constInstance([]),