)]}'
{
  "commit": "f20bc39cc0051771e140fcc0b3ea993b300ddfaa",
  "tree": "14d799b727f6a3848bddeee6aa1dd37aeef2bbe6",
  "parents": [
    "d203008741231b2841c119013198e8f371c19da3"
  ],
  "author": {
    "name": "Reid Baker",
    "email": "1063596+reidbaker@users.noreply.github.com",
    "time": "Fri Apr 18 16:32:08 2025 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Apr 18 16:32:08 2025 +0000"
  },
  "message": "Add kotlin compatability to build file validation (#167143)\n\nFixes https://github.com/flutter/flutter/issues/161443 \n\n* adds a new gradle task like `javaVersion` named `kgpVersion` that\nprints the version of kgp.\n* adds gradle_utils.dart method for getting kgp version\n* * kgp method is moved to utilities and we attempt to use a plugin\nmethod before reflection.\n* adds methods or  evaluating KGP + gradle and KGP + AGP compatibility. \n* * It turns out that we have been using incompatible versions that\nhappen to work with the subset of kotlin we are using.\n* Uses new kgp methods in flutter analyze --suggestions as part of the\nexisting agp/java/gradle compatibility matrix.\n* adds new tests for all new functionality\n* Adds comments to sections of the code I found could use them. \n* Modifies flutter gallery to use a compatible version of kotlin and\nupdate its lockfiles.\n\n\n## Pre-launch Checklist\n\n- [x] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [x] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [x] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant documentation (doc comments with `///`).\n- [X] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [x] All existing and new tests are passing.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "545abc59e924a9127dd0d66b4c85bb9e855adb90",
      "old_mode": 33188,
      "old_path": "dev/integration_tests/flutter_gallery/android/buildscript-gradle.lockfile",
      "new_id": "4de84865dd9943934e5c52cf8980af74ddb5ccab",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/flutter_gallery/android/buildscript-gradle.lockfile"
    },
    {
      "type": "modify",
      "old_id": "c8c0c921411115b556c22ff6b628ec27fcafdaae",
      "old_mode": 33188,
      "old_path": "dev/integration_tests/flutter_gallery/android/project-integration_test.lockfile",
      "new_id": "005d2033a2dba100c0f5ebd625533b6bb21e9fb6",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/flutter_gallery/android/project-integration_test.lockfile"
    },
    {
      "type": "modify",
      "old_id": "2db9276cffe254dde20fce1f4ba644840c05f3e5",
      "old_mode": 33188,
      "old_path": "dev/integration_tests/flutter_gallery/android/project-url_launcher_android.lockfile",
      "new_id": "f4a787f8540f92936d48d3ca44ba66065e0a8efc",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/flutter_gallery/android/project-url_launcher_android.lockfile"
    },
    {
      "type": "modify",
      "old_id": "4a155b35ec304af4a4baaf5f5fcbe6d0ac296764",
      "old_mode": 33188,
      "old_path": "dev/integration_tests/flutter_gallery/android/settings.gradle",
      "new_id": "6a18a4852e57b555d21914ad76d776b918494011",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/flutter_gallery/android/settings.gradle"
    },
    {
      "type": "modify",
      "old_id": "11cab0ea63613d4d675457aa964afba4e1f075b0",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/gradle/src/main/kotlin/DependencyVersionChecker.kt",
      "new_id": "b177c0583944c7c9213423796c4aebf5ebe5888f",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/main/kotlin/DependencyVersionChecker.kt"
    },
    {
      "type": "modify",
      "old_id": "60907b10a5dfe19850c82b7920a89c8706f66324",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt",
      "new_id": "60c724ffcc4c92051e04a7dd8524b741a9d99dd4",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt"
    },
    {
      "type": "modify",
      "old_id": "785c2396ecb33aef9b6756635909e2ef51a6c1bf",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/gradle/src/main/kotlin/FlutterPluginUtils.kt",
      "new_id": "71effc96b15858ab0a49ca17f611b36275311e06",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/main/kotlin/FlutterPluginUtils.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2ed6192f069c9ff723fcfeecdfb1a4b40a17247b",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/main/kotlin/VersionFetcher.kt"
    },
    {
      "type": "modify",
      "old_id": "88db3d3537f62088066a5d4c8d03bbdb36b13bbf",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/gradle/src/test/kotlin/FlutterPluginUtilsTest.kt",
      "new_id": "ed96ef0a71dd866c7d2e1881b8e0557c94d5be81",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/test/kotlin/FlutterPluginUtilsTest.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9df55fa35796e4b61f9489885611d9336d8ac574",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/test/kotlin/VersionFetcherTest.kt"
    },
    {
      "type": "modify",
      "old_id": "a3d78c321b561e9d9de0b1a408e1f018525a6b90",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/android/gradle_utils.dart",
      "new_id": "e1f865905bd5cbc7e84edd359a7ec0f1dfd6af7b",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/android/gradle_utils.dart"
    },
    {
      "type": "modify",
      "old_id": "4ef0d27079030fa700208f6d895a50f5b64200dc",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/project.dart",
      "new_id": "3774d35a874b19da75aa0974f2dd2b35b9f35727",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/project.dart"
    },
    {
      "type": "modify",
      "old_id": "271d1bf302cc9e13fdc6cd762e9f76f068a688e0",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart",
      "new_id": "9c56ccf43aa5ac820da0cc266241a372f743bbfa",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/android/gradle_utils_test.dart"
    },
    {
      "type": "modify",
      "old_id": "8df65c1a14387e9186ea30c788dcf7371d668fff",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/project_test.dart",
      "new_id": "5ad22fec1a220bae5d3dd9f2806c8e1a5095c207",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/project_test.dart"
    },
    {
      "type": "modify",
      "old_id": "7dcb34a9361c33f92d34ed4e6f2963a8ee112496",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/analyze_suggestions_integration_test.dart",
      "new_id": "4446f3e09e3eda3444ebbad62c996f53ae2baa97",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/analyze_suggestions_integration_test.dart"
    }
  ]
}
