diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 6a901e11287..009cacfb0d6 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 16.0.4 + +* Pigeon Kotlin generator generates screaming snake names for multi-word enums. + ## 16.0.3 * [kotlin] Separates message call code generation into separate methods. diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart index a61eb42865d..c4b83ec51b3 100644 --- a/packages/pigeon/lib/kotlin_generator.dart +++ b/packages/pigeon/lib/kotlin_generator.dart @@ -127,7 +127,10 @@ class KotlinGenerator extends StructuredGenerator { enumerate(anEnum.members, (int index, final EnumMember member) { addDocumentationComments( indent, member.documentationComments, _docCommentSpec); - indent.write('${member.name.toUpperCase()}($index)'); + final RegExp exp = RegExp('[a-z][A-Z]'); + final String snakedMemberName = member.name.replaceAllMapped(exp, + (Match match) => '${match.group(0)?[0]}_${match.group(0)?[1]}'); + indent.write('${snakedMemberName.toUpperCase()}($index)'); if (index != anEnum.members.length - 1) { indent.addln(','); } else { diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index c6029d4ed30..6ac3bb29449 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: 16.0.3 # This must match the version in lib/generator_tools.dart +version: 16.0.4 # This must match the version in lib/generator_tools.dart environment: sdk: ">=3.0.0 <4.0.0" diff --git a/packages/pigeon/test/kotlin_generator_test.dart b/packages/pigeon/test/kotlin_generator_test.dart index f51c68b32bc..83df313e128 100644 --- a/packages/pigeon/test/kotlin_generator_test.dart +++ b/packages/pigeon/test/kotlin_generator_test.dart @@ -1797,4 +1797,34 @@ void main() { expect(code, contains(errorClassName)); expect(code, isNot(contains('FlutterError'))); }); + + test('gen screaming snake case enum', () { + final Enum anEnum = Enum( + name: 'Foobar', + members: [ + EnumMember(name: 'enumOne'), + EnumMember(name: 'EnumTWo'), + EnumMember(name: 'enumThreeWords'), + ], + ); + final Root root = Root( + apis: [], + classes: [], + enums: [anEnum], + ); + final StringBuffer sink = StringBuffer(); + const KotlinOptions kotlinOptions = KotlinOptions(); + const KotlinGenerator generator = KotlinGenerator(); + generator.generate( + kotlinOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final String code = sink.toString(); + expect(code, contains('enum class Foobar(val raw: Int) {')); + expect(code, contains('ENUM_ONE(0)')); + expect(code, contains('ENUM_TWO(1)')); + expect(code, contains('ENUM_THREE_WORDS(2)')); + }); }