)]}'
{
  "commit": "47cfea4c2a25447b35df994e7292d3a27513fd3b",
  "tree": "0932158e01f64e4b297db0813a104316fba4866c",
  "parents": [
    "c3360ac8ae748c270cabe3a2f867b4ac9d6d36b1"
  ],
  "author": {
    "name": "stuartmorgan-g",
    "email": "stuartmorgan@google.com",
    "time": "Thu Apr 30 13:27:59 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Apr 30 17:27:59 2026 +0000"
  },
  "message": "[in_app_purchase] Switch to Kotlin Pigeon (#11608)\n\nReplaces the Java Pigeon generator with the Kotlin Pigeon generator, and adjusts the project accordingly:\r\n- Adds Kotlin build setings to Gradle.\r\n- Updates API signatures and number handling for Kotlin/Java generator differences.\r\n- Adds generic Java/Kotlin compat shim to create Result objects from Java, since those haven\u0027t been added to the Pigeon generator yet.\r\n- Updates tests to use constructors instead of builders, since the Kotlin generator doesn\u0027t create builders.\r\n- Updates tests to use a fake result value, instead of mocking the Java Pigeon response object.\r\n\r\nMost of this conversion was done by Gemini; I gave it my previous \"Switch to Kotlin Pigeon\" PRs for context, and let it do most of the work. Once it had a passing conversion I did some manual cleanup and warning fixing.\r\n\r\nThis also converts Translator.java, which does SDK\u003c-\u003ePigeon type conversion, to Kotlin, per discussion in the linked issue:\r\n- I used Android Studio\u0027s auto-converter.\r\n- I did some manual cleanup (e.g., fixing nullability where it assumed nullable because the Java wasn\u0027t annotated, simplifying some switch return statements).\r\n- I added parameter names to all the constructors, so it\u0027s easy to see that the params are being passed correctly in review both now and in future changes.\r\n- I had Gemini do a pass over it to make the Kotlin simpler or more idiomatic. The big improvement was it replacing a bunch of manual list construction with `map`s.\r\n- Removed `currencyCodeFromSymbol`, which has been dead code for years.\r\n\r\nThese steps are separate commits in case it\u0027s useful to review them separately\r\n\r\nFixes https://github.com/flutter/flutter/issues/185545\r\n\r\n## Pre-Review Checklist\r\n\r\n[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "88c613231c8a926c95e7393b8aaa7db08248e16d",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md",
      "new_id": "bd2d07611adf7915d2c68568ff9b50d44a0a0075",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "adfb82752f567c1c833ecf98a0517065e95be0ea",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts",
      "new_id": "e70dbf7df8cf4036c454279faacb1e22e829aa20",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts"
    },
    {
      "type": "modify",
      "old_id": "a492287f0de982075ba2b24e93fbf38e66d0528f",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactory.java",
      "new_id": "73b80a3c4ec2dc9c30c60f695adaf18448d5ff30",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactory.java"
    },
    {
      "type": "modify",
      "old_id": "7c5cf9a5a0cfb645a8f66a2cf0efec368c26350e",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactoryImpl.java",
      "new_id": "fcca4ca118a20393265895e1e0483a2df058230f",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactoryImpl.java"
    },
    {
      "type": "modify",
      "old_id": "ccb6bacdbb328c448195c59e78925ceb391842a4",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/InAppPurchasePlugin.java",
      "new_id": "f2a14d21e21d1014d7635c14904335c2fd98bf1d",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/InAppPurchasePlugin.java"
    },
    {
      "type": "delete",
      "old_id": "5a9191c4e860b8bb9dffd393480794e92d343c9f",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Messages.java",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "fe9a0cb1016f10991ed0a88ab8dd7b956b7137c5",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java",
      "new_id": "c934564366cb62a789f06ed61b1e4aa1f3084695",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java"
    },
    {
      "type": "modify",
      "old_id": "2167ea2d09726f0801524ad632e69be9fb1366db",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/PluginPurchaseListener.java",
      "new_id": "393572c4a1194ec1fbbb01f7b079acf05391c911",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/PluginPurchaseListener.java"
    },
    {
      "type": "delete",
      "old_id": "cba877cdc184ca2ec8fa0b25d0ad05cfe85b7bc4",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d206d17d3d1956acfc784c07e9d95371c9a9fc72",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/kotlin/io/flutter/plugins/inapppurchase/Messages.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5ad237f47bd9a8d3071342889741b2023ae715a",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/kotlin/io/flutter/plugins/inapppurchase/ResultUtils.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ae9ab0498948a5fc6de12f25539d2dfc2dcbbda2",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/main/kotlin/io/flutter/plugins/inapppurchase/Translator.kt"
    },
    {
      "type": "modify",
      "old_id": "1181114f723621d9b2f2d5dce6ea644eeac77fe2",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/BillingClientFactoryImplTest.java",
      "new_id": "6ea9175d654913baa7f96091798b2e5cb1da572e",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/BillingClientFactoryImplTest.java"
    },
    {
      "type": "modify",
      "old_id": "e48f2d14b71b87ba2e4ff7107d09d0e88eb1b7a4",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java",
      "new_id": "80176aa78bcdd3ff580f50c33cc5cf41d847187b",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java"
    },
    {
      "type": "modify",
      "old_id": "6d6f60904dcdb8b3a36dc709292d438af58f71f4",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java",
      "new_id": "7f82b958400b746f8ee7e65ece7647dbcfba02bf",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java"
    },
    {
      "type": "modify",
      "old_id": "cbcdb28231df6b955da8be63ecb0041e49244d94",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/lib/src/messages.g.dart",
      "new_id": "6e100a89f40d025f8e9e2641141fa94bd649f3e1",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/lib/src/messages.g.dart"
    },
    {
      "type": "modify",
      "old_id": "c1e04bffdeb777b25fca547ec8866eeab34d5403",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/pigeons/messages.dart",
      "new_id": "7aa6c9e84ceb71516fe162482dab5ad1f08e1230",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/pigeons/messages.dart"
    },
    {
      "type": "modify",
      "old_id": "9eb1a5547583a10fc6dea750eb62f70e4f8cdf13",
      "old_mode": 33188,
      "old_path": "packages/in_app_purchase/in_app_purchase_android/pubspec.yaml",
      "new_id": "31ac03a734371a8efcdf2fa0dea93a2c0054dc5d",
      "new_mode": 33188,
      "new_path": "packages/in_app_purchase/in_app_purchase_android/pubspec.yaml"
    }
  ]
}
