From 68ecf71baa9688fdd05b55f184d68dc69bf5764e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 30 Nov 2025 16:58:22 -0500 Subject: [PATCH] fix param name --- packages/pigeon/CHANGELOG.md | 3 +- packages/pigeon/lib/src/generator_tools.dart | 2 +- .../pigeon/lib/src/pigeon_lib_internal.dart | 5 ++- packages/pigeon/pubspec.yaml | 2 +- packages/pigeon/test/pigeon_lib_test.dart | 33 +++++++++++++++++++ 5 files changed, 41 insertions(+), 4 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 96f8ff9629a..8057c17d314 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 26.1.3 +* [dart] Fixes error from constructor parameter sharing name with attached field for a ProxyApi. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 26.1.2 diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index 9d4322b88e1..c0ab83cbedf 100644 --- a/packages/pigeon/lib/src/generator_tools.dart +++ b/packages/pigeon/lib/src/generator_tools.dart @@ -15,7 +15,7 @@ import 'generator.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '26.1.2'; +const String pigeonVersion = '26.1.3'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/src/pigeon_lib_internal.dart b/packages/pigeon/lib/src/pigeon_lib_internal.dart index 07b84b059d0..f1387d8032e 100644 --- a/packages/pigeon/lib/src/pigeon_lib_internal.dart +++ b/packages/pigeon/lib/src/pigeon_lib_internal.dart @@ -1079,7 +1079,10 @@ List _validateProxyApi( result.add(unsupportedDataClassError(parameter)); } - if (api.fields.any((ApiField field) => field.name == parameter.name) || + if (api.fields.any( + (ApiField field) => + field.name == parameter.name && !field.isAttached, + ) || api.flutterMethods.any( (Method method) => method.name == parameter.name, )) { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 27c6315b51a..1158ddcab09 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 26.1.2 # This must match the version in lib/src/generator_tools.dart +version: 26.1.3 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.9.0 diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index eda364af15e..2627787c4f0 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -1757,6 +1757,39 @@ abstract class MyClass { ), ); }); + + test('constructor parameters can share name of attached fields', () { + const code = ''' +@ProxyApi() +abstract class MyClass { + MyClass(int aField); + + @attached + late MyClass aField; +} +'''; + final ParseResults parseResult = parseSource(code); + expect(parseResult.errors, isEmpty); + }); + + test('constructor parameters can not share name of unattached fields', () { + const code = ''' +@ProxyApi() +abstract class MyClass { + MyClass(int aField); + + late MyClass? aField; +} +'''; + final ParseResults parseResult = parseSource(code); + expect(parseResult.errors, isNotEmpty); + expect( + parseResult.errors[0].message, + contains( + 'Parameter names must not share a name with a field or callback method in constructor "" in API: "MyClass"', + ), + ); + }); }); group('event channel validation', () {