From c5a04978f836ee16a67ae4af8faf7d27c867c3b7 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 15 Dec 2025 12:47:32 -0500 Subject: [PATCH 01/14] Modify genrated code to implement methods from *PigeonEventChannelWrapper --- packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 479fdaddcc4..039a1c1681d 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1233,6 +1233,12 @@ if (wrapped == null) { val internalStreamHandler = ${generatorOptions.fileSpecificClassNameComponent}PigeonStreamHandler<${_kotlinTypeForDartType(func.returnType)}>(streamHandler) EventChannel(messenger, channelName, ${generatorOptions.fileSpecificClassNameComponent}$_pigeonMethodChannelCodec).setStreamHandler(internalStreamHandler) } + // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper + override + open fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} + + override + open fun onCancel(p0: Any?) {} } } '''); From 84343831eba4d613ebc3bc3d90f31672d591e1ad Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 15 Dec 2025 12:54:15 -0500 Subject: [PATCH 02/14] Bump tooling/yaml version, update changelog --- packages/pigeon/CHANGELOG.md | 5 +++++ packages/pigeon/lib/src/generator_tools.dart | 2 +- packages/pigeon/pubspec.yaml | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 626aa205c37..ca15300c006 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,8 @@ +## 26.1.5 + +* [kotlin] Fixes "bridge method" warning that occures when a uses *PigeonEventChannelWrapper as a + supertype without implementing all methods. + ## 26.1.4 * [swift][kotlin] Fixes crash that occurs when an object that is removed from the instance manager diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index cb8aa5435db..e58ce2d83a0 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.4'; +const String pigeonVersion = '26.1.5'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index a6f1bd0d92a..b47ab59157a 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.4 # This must match the version in lib/src/generator_tools.dart +version: 26.1.5 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.9.0 From e29d7557328b6e5135c2c5b59d835a4ceb2f8f4d Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 15 Dec 2025 12:55:48 -0500 Subject: [PATCH 03/14] update kotlin generated tests --- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++++ .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index d7ec9b6255c..cfb6ec0d346 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -185,5 +185,9 @@ abstract class StreamEventsStreamHandler : EventChannel(messenger, channelName, EventChannelMessagesPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } + // Implement methods from EventChannelMessagesPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index 7e835701a23..00da2203434 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -574,6 +574,10 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap EventChannel(messenger, channelName, EventChannelTestsPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } + // Implement methods from EventChannelTestsPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } } @@ -594,6 +598,10 @@ abstract class StreamEventsStreamHandler : EventChannel(messenger, channelName, EventChannelTestsPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } + // Implement methods from EventChannelTestsPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } } @@ -614,5 +622,9 @@ abstract class StreamConsistentNumbersStreamHandler : EventChannel(messenger, channelName, EventChannelTestsPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } + // Implement methods from EventChannelTestsPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } } From ded0ac9e15ec461bb386165ebd97ab02d27ab1af Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 15 Dec 2025 13:19:38 -0500 Subject: [PATCH 04/14] Implements should be outside companion object --- .../EventChannelMessages.g.kt | 8 +++---- .../lib/src/kotlin/kotlin_generator.dart | 12 +++++----- .../test_plugin/EventChannelTests.gen.kt | 24 +++++++++---------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index cfb6ec0d346..3642aee9e8b 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -185,9 +185,9 @@ abstract class StreamEventsStreamHandler : EventChannel(messenger, channelName, EventChannelMessagesPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } - // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} - - override open fun onCancel(p0: Any?) {} } + // Implement methods from EventChannelMessagesPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 039a1c1681d..9d18b36ac66 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1233,13 +1233,13 @@ if (wrapped == null) { val internalStreamHandler = ${generatorOptions.fileSpecificClassNameComponent}PigeonStreamHandler<${_kotlinTypeForDartType(func.returnType)}>(streamHandler) EventChannel(messenger, channelName, ${generatorOptions.fileSpecificClassNameComponent}$_pigeonMethodChannelCodec).setStreamHandler(internalStreamHandler) } - // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override - open fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} - - override - open fun onCancel(p0: Any?) {} } + // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper + override + open fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} + + override + open fun onCancel(p0: Any?) {} } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index 00da2203434..b3059e6325c 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -574,11 +574,11 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap EventChannel(messenger, channelName, EventChannelTestsPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } - // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} - - override open fun onCancel(p0: Any?) {} } + // Implement methods from EventChannelTestsPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } abstract class StreamEventsStreamHandler : @@ -598,11 +598,11 @@ abstract class StreamEventsStreamHandler : EventChannel(messenger, channelName, EventChannelTestsPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } - // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} - - override open fun onCancel(p0: Any?) {} } + // Implement methods from EventChannelTestsPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } abstract class StreamConsistentNumbersStreamHandler : @@ -622,9 +622,9 @@ abstract class StreamConsistentNumbersStreamHandler : EventChannel(messenger, channelName, EventChannelTestsPigeonMethodCodec) .setStreamHandler(internalStreamHandler) } - // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} - - override open fun onCancel(p0: Any?) {} } + // Implement methods from EventChannelTestsPigeonEventChannelWrapper + override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + + override open fun onCancel(p0: Any?) {} } From 3bde0ba08b4d0f83e14e5296cda78aa26189877c Mon Sep 17 00:00:00 2001 From: Reid Baker <1063596+reidbaker@users.noreply.github.com> Date: Mon, 15 Dec 2025 13:20:40 -0500 Subject: [PATCH 05/14] Update packages/pigeon/CHANGELOG.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- packages/pigeon/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index ca15300c006..a63c8a82e37 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,7 +1,7 @@ ## 26.1.5 -* [kotlin] Fixes "bridge method" warning that occures when a uses *PigeonEventChannelWrapper as a - supertype without implementing all methods. +* [kotlin] Fixes a "bridge method" warning that occurs when a class uses `*PigeonEventChannelWrapper` as a + supertype without implementing all of its methods. ## 26.1.4 From 840ed28564dc4fb512c6c0df776d5ca6a8055ce7 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 15 Dec 2025 16:24:23 -0500 Subject: [PATCH 06/14] Make implementation abstract to force implementation while still not warning on bridged methods --- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++-- packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 6 ++---- .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++------ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index 3642aee9e8b..78482ec0cc7 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -187,7 +187,7 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override open fun onCancel(p0: Any?) {} + override open abstract fun onCancel(p0: Any?) {} } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 9d18b36ac66..36a1fc67874 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1235,11 +1235,9 @@ if (wrapped == null) { } } // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override - open fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} - override - open fun onCancel(p0: Any?) {} + override open abstract fun onCancel(p0: Any?) {} } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index b3059e6325c..d657a87a733 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -576,9 +576,9 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override open fun onCancel(p0: Any?) {} + override open abstract fun onCancel(p0: Any?) {} } abstract class StreamEventsStreamHandler : @@ -600,9 +600,9 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override open fun onCancel(p0: Any?) {} + override open abstract fun onCancel(p0: Any?) {} } abstract class StreamConsistentNumbersStreamHandler : @@ -624,7 +624,7 @@ abstract class StreamConsistentNumbersStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open fun onListen(p0: Any?, sink: PigeonEventSink) {} + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override open fun onCancel(p0: Any?) {} + override open abstract fun onCancel(p0: Any?) {} } From 5abaa3b6580ec57099ae9691fdd045bf485b4902 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 13:15:57 -0500 Subject: [PATCH 07/14] Remove open and implemenation --- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++-- packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 4 ++-- .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index 78482ec0cc7..c27196f9c14 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -187,7 +187,7 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) {} + override abstract fun onCancel(p0: Any?) } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 36a1fc67874..7c948e7629d 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1235,9 +1235,9 @@ if (wrapped == null) { } } // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} + override abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) - override open abstract fun onCancel(p0: Any?) {} + override abstract fun onCancel(p0: Any?) } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index d657a87a733..64fbadcf50a 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -576,9 +576,9 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) {} + override abstract fun onCancel(p0: Any?) } abstract class StreamEventsStreamHandler : @@ -600,9 +600,9 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) {} + override abstract fun onCancel(p0: Any?) } abstract class StreamConsistentNumbersStreamHandler : @@ -624,7 +624,7 @@ abstract class StreamConsistentNumbersStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) {} + override abstract fun onCancel(p0: Any?) } From a8b0df107dbfb9cb34e498342c7e3801c853bc53 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 13:35:07 -0500 Subject: [PATCH 08/14] Modify example to implement cancel --- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++-- .../dev/flutter/pigeon_example_app/MainActivity.kt | 2 ++ packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 4 ++-- .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++------ 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index c27196f9c14..72d181cb270 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -187,7 +187,7 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override abstract fun onCancel(p0: Any?) + override open abstract fun onCancel(p0: Any?) } diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt index d2423b54475..6d80f96ffdc 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt @@ -64,6 +64,8 @@ class EventListener : StreamEventsStreamHandler() { eventSink = sink } + override fun onCancel(p0: Any?) {} + fun onIntEvent(event: Long) { eventSink?.success(IntEvent(data = event)) } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 7c948e7629d..b04d91d8d65 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1235,9 +1235,9 @@ if (wrapped == null) { } } // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) - override abstract fun onCancel(p0: Any?) + override open abstract fun onCancel(p0: Any?) } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index 64fbadcf50a..aa4cdfc4d7d 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -576,9 +576,9 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override abstract fun onCancel(p0: Any?) + override open abstract fun onCancel(p0: Any?) } abstract class StreamEventsStreamHandler : @@ -600,9 +600,9 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override abstract fun onCancel(p0: Any?) + override open abstract fun onCancel(p0: Any?) } abstract class StreamConsistentNumbersStreamHandler : @@ -624,7 +624,7 @@ abstract class StreamConsistentNumbersStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override abstract fun onCancel(p0: Any?) + override open abstract fun onCancel(p0: Any?) } From 5b75a9e5b862ee3296ad8add9150673a08df3673 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 14:34:33 -0500 Subject: [PATCH 09/14] Add onCancel method to TestPlugin.kt --- .../src/main/kotlin/com/example/test_plugin/TestPlugin.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt index e032596170c..ff3ba1565b9 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt @@ -906,6 +906,8 @@ object SendInts : StreamIntsStreamHandler() { } handler.postDelayed(r, 10) } + + override fun onCancel(p0: Any?) {} } object SendClass : StreamEventsStreamHandler() { @@ -938,6 +940,8 @@ object SendClass : StreamEventsStreamHandler() { } handler.postDelayed(r, 10) } + + override fun onCancel(p0: Any?) {} } class SendConsistentNumbers(private val numberToSend: Long) : @@ -962,4 +966,6 @@ class SendConsistentNumbers(private val numberToSend: Long) : } handler.postDelayed(r, 10) } + + override fun onCancel(p0: Any?) {} } From b1710795c2d7dd46afe4bcd63e10282e01f11d3e Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 14:37:50 -0500 Subject: [PATCH 10/14] Update example readme --- packages/pigeon/example/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/pigeon/example/README.md b/packages/pigeon/example/README.md index 1ce5a202cb7..8df8c42c741 100644 --- a/packages/pigeon/example/README.md +++ b/packages/pigeon/example/README.md @@ -453,6 +453,8 @@ class EventListener : StreamEventsStreamHandler() { eventSink = sink } + override fun onCancel(p0: Any?) {} + fun onIntEvent(event: Long) { eventSink?.success(IntEvent(data = event)) } From c405fa32fa8346f9a07fb0ea739e4fb2c038d042 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 15:03:02 -0500 Subject: [PATCH 11/14] Remove open with abstract because it causes lint errors --- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++-- packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 4 ++-- .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index 72d181cb270..c27196f9c14 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -187,7 +187,7 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index b04d91d8d65..7c948e7629d 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1235,9 +1235,9 @@ if (wrapped == null) { } } // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) - override open abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index aa4cdfc4d7d..64fbadcf50a 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -576,9 +576,9 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) } abstract class StreamEventsStreamHandler : @@ -600,9 +600,9 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) } abstract class StreamConsistentNumbersStreamHandler : @@ -624,7 +624,7 @@ abstract class StreamConsistentNumbersStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override open abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) - override open abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) } From b1e42793dd6ae67927ff11a6adeb57fad12622b0 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 15:43:28 -0500 Subject: [PATCH 12/14] onListen and onCancel have implementations so that not every extension class needs to implement both --- packages/pigeon/example/README.md | 2 -- .../kotlin/dev/flutter/pigeon_example_app/MainActivity.kt | 2 -- packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 4 ++-- .../src/main/kotlin/com/example/test_plugin/TestPlugin.kt | 6 ------ 4 files changed, 2 insertions(+), 12 deletions(-) diff --git a/packages/pigeon/example/README.md b/packages/pigeon/example/README.md index 8df8c42c741..1ce5a202cb7 100644 --- a/packages/pigeon/example/README.md +++ b/packages/pigeon/example/README.md @@ -453,8 +453,6 @@ class EventListener : StreamEventsStreamHandler() { eventSink = sink } - override fun onCancel(p0: Any?) {} - fun onIntEvent(event: Long) { eventSink?.success(IntEvent(data = event)) } diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt index 6d80f96ffdc..d2423b54475 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt @@ -64,8 +64,6 @@ class EventListener : StreamEventsStreamHandler() { eventSink = sink } - override fun onCancel(p0: Any?) {} - fun onIntEvent(event: Long) { eventSink?.success(IntEvent(data = event)) } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 7c948e7629d..d022f6645ef 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1235,9 +1235,9 @@ if (wrapped == null) { } } // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} - override abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) {} } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt index ff3ba1565b9..e032596170c 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt @@ -906,8 +906,6 @@ object SendInts : StreamIntsStreamHandler() { } handler.postDelayed(r, 10) } - - override fun onCancel(p0: Any?) {} } object SendClass : StreamEventsStreamHandler() { @@ -940,8 +938,6 @@ object SendClass : StreamEventsStreamHandler() { } handler.postDelayed(r, 10) } - - override fun onCancel(p0: Any?) {} } class SendConsistentNumbers(private val numberToSend: Long) : @@ -966,6 +962,4 @@ class SendConsistentNumbers(private val numberToSend: Long) : } handler.postDelayed(r, 10) } - - override fun onCancel(p0: Any?) {} } From 0903bf6178c66dce5e9e06ccd4378ded7f326545 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 15:46:00 -0500 Subject: [PATCH 13/14] Update generated files --- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++-- .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index c27196f9c14..a12e8fa6f05 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -187,7 +187,7 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) {} } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index 64fbadcf50a..a273cb5d02c 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -576,9 +576,9 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) {} } abstract class StreamEventsStreamHandler : @@ -600,9 +600,9 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) {} } abstract class StreamConsistentNumbersStreamHandler : @@ -624,7 +624,7 @@ abstract class StreamConsistentNumbersStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) + override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) + override abstract fun onCancel(p0: Any?) {} } From cd16ddf92b3f8d0d8f0082d09ea26e0f24548feb Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 16 Dec 2025 17:54:55 -0500 Subject: [PATCH 14/14] Remove abstract and modify changelog --- packages/pigeon/CHANGELOG.md | 3 +-- .../pigeon_example_app/EventChannelMessages.g.kt | 4 ++-- packages/pigeon/lib/src/kotlin/kotlin_generator.dart | 4 ++-- .../com/example/test_plugin/EventChannelTests.gen.kt | 12 ++++++------ 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index a63c8a82e37..a3b5327b802 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,7 +1,6 @@ ## 26.1.5 -* [kotlin] Fixes a "bridge method" warning that occurs when a class uses `*PigeonEventChannelWrapper` as a - supertype without implementing all of its methods. +* [kotlin] Fixes a "bridge method" warning when implementing an event stream handler. ## 26.1.4 diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index a12e8fa6f05..e524f5d5b0c 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -187,7 +187,7 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelMessagesPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) {} + override fun onCancel(p0: Any?) {} } diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index d022f6645ef..7df50a97599 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -1235,9 +1235,9 @@ if (wrapped == null) { } } // Implement methods from ${generatorOptions.fileSpecificClassNameComponent}PigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} + override fun onListen(p0: Any?, sink: PigeonEventSink<${_kotlinTypeForDartType(func.returnType)}>) {} - override abstract fun onCancel(p0: Any?) {} + override fun onCancel(p0: Any?) {} } '''); } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index a273cb5d02c..a3f79976d79 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -576,9 +576,9 @@ abstract class StreamIntsStreamHandler : EventChannelTestsPigeonEventChannelWrap } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) {} + override fun onCancel(p0: Any?) {} } abstract class StreamEventsStreamHandler : @@ -600,9 +600,9 @@ abstract class StreamEventsStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) {} + override fun onCancel(p0: Any?) {} } abstract class StreamConsistentNumbersStreamHandler : @@ -624,7 +624,7 @@ abstract class StreamConsistentNumbersStreamHandler : } } // Implement methods from EventChannelTestsPigeonEventChannelWrapper - override abstract fun onListen(p0: Any?, sink: PigeonEventSink) {} + override fun onListen(p0: Any?, sink: PigeonEventSink) {} - override abstract fun onCancel(p0: Any?) {} + override fun onCancel(p0: Any?) {} }