)]}'
{
  "commit": "91bc83d4d40ca5787a31d720d441d2fe975e00e3",
  "tree": "f9683eb99e684b43fad6fea569922d4afff8d300",
  "parents": [
    "1c6d4deb49497c93d19e5ec098e79ef599e9aa5d"
  ],
  "author": {
    "name": "Paul Berry",
    "email": "paulberry@google.com",
    "time": "Fri Dec 13 12:27:21 2024 -0800"
  },
  "committer": {
    "name": "dart-internal-monorepo",
    "email": "dart-internal-monorepo@dart-ci-internal.iam.gserviceaccount.com",
    "time": "Fri Dec 13 12:29:03 2024 -0800"
  },
  "message": "[analyzer] Change ResolverVisitor to always visit subexpressions using analyzeExpression.\n\nPreviously, when `ResolverVisitor` needed to provide a context to a\nsubexpression, it would always use `analyzeExpression` to visit it,\nbut when no context was needed, it would sometimes visit the\nsubexpression by calling `ExpressionImpl.accept`. This made the\n`ResolverVisitor` more difficult to reason about, since there wasn\u0027t a\ncommon method through which all subexpression visits were dispatched.\n\nWith change, any time the `ResolverVisitor` visits an expression in a\ncontext that\u0027s inside a method body or initializer, it visits it using\n`analyzeExpression`. To make sure I haven\u0027t missed anything, and to\nprevent future regressions, I\u0027ve added an assertion to\n`_InferenceLogWriterImpl.enterExpression` that verifies that all\nexpressions visited by the `ResolverVisitor` are visited via\n`analyzeExpression` when inside a top level declaration.\n\nThis change paves the way for allowing the analyzer to use the shared\nimplementation of null-shorting introduced in\nhttps://dart-review.googlesource.com/c/sdk/+/399480.\n\nChange-Id: I56eb102ae0034898f5171ac4cc3e90676bce5db7\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/399781\nReviewed-by: Brian Wilkerson \u003cbrianwilkerson@google.com\u003e\nCommit-Queue: Paul Berry \u003cpaulberry@google.com\u003e\n\nhttps://dart.googlesource.com/sdk/+/0d127497ac6f9895a006e0c3b66203861facaf59\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "790d60aa829bdc4fba705b6e809f601734a275d6",
      "old_mode": 33188,
      "old_path": "DEPS",
      "new_id": "1a63f0aeadb326389c0a0f9cf24ffb5fbddff2b4",
      "new_mode": 33188,
      "new_path": "DEPS"
    },
    {
      "type": "modify",
      "old_id": "6eb86a972ac494314c43ebb4d9ca42190953ad5e",
      "old_mode": 33188,
      "old_path": "commits.json",
      "new_id": "c970b2c1bf5cd8e6144e0ff97ac190eff560ce3c",
      "new_mode": 33188,
      "new_path": "commits.json"
    }
  ]
}
