)]}'
{
  "commit": "49bb15585f01a7aa8cdec75a59dbef2459740ce9",
  "tree": "5fdc4a7d158656a07f4c7d7e46bd902838ef299e",
  "parents": [
    "fef0657d175ff9b1dcae5a90e90747e31e28604d"
  ],
  "author": {
    "name": "Paul Berry",
    "email": "paulberry@google.com",
    "time": "Fri Dec 06 17:54:50 2024 +0000"
  },
  "committer": {
    "name": "dart-internal-monorepo",
    "email": "dart-internal-monorepo@dart-ci-internal.iam.gserviceaccount.com",
    "time": "Fri Dec 06 10:05:13 2024 -0800"
  },
  "message": "[analyzer] Fix null shorting extent in cascade sections.\n\nWhen a cascade section contains a null-aware expression, the null\nshorting should be terminated at the end of the cascade section. For\nexample, in the statement:\n\n    e..x?.f()..g();\n\nif `e.x` evaluates to `null`, the call to `f()` should be skipped, but\nnot the call to `g()`.\n\nPrior to this fix, the analyzer erroneously considered the null\nshorting to be terminated at the end of the entire cascade. The\nmistake wasn\u0027t easily observed, since the analyzer doesn\u0027t have\nback-end semantics. But it was still observable in some rare cases\ninvolving type promotion. For example, in the statement:\n\n    e..x?.f(i!)..g(i!);\n\nthe analyzer would consider the second `!` to be unnecessary, because\nin its model of flow control, `g(i!)` would only ever execute after\n`f(i!)`.\n\nFixes https://github.com/dart-lang/sdk/issues/59658.\n\nBug: https://github.com/dart-lang/sdk/issues/59658\nChange-Id: I8540daca121dac6960f8d6a2a3ffa3e38a0bf921\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/398926\nAuto-Submit: Paul Berry \u003cpaulberry@google.com\u003e\nReviewed-by: Konstantin Shcheglov \u003cscheglov@google.com\u003e\nCommit-Queue: Paul Berry \u003cpaulberry@google.com\u003e\n\nhttps://dart.googlesource.com/sdk/+/922f212340fd10b041a1659c8571a69f3e6f6370\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0a6c2f79068b826e5f2ffb7c5f58e388df9321f0",
      "old_mode": 33188,
      "old_path": "DEPS",
      "new_id": "b7ecfe81ed718f8254f23aaf86fe59851091e3b5",
      "new_mode": 33188,
      "new_path": "DEPS"
    },
    {
      "type": "modify",
      "old_id": "a8ba9e8b787850852a09fe350d7625d427a87bb9",
      "old_mode": 33188,
      "old_path": "commits.json",
      "new_id": "b42da3fe976d6a2dfd1f96f4c014fe16950a364e",
      "new_mode": 33188,
      "new_path": "commits.json"
    }
  ]
}
