)]}'
{
  "commit": "b73d14acde2bfeafb092157f9efd9343f2404a36",
  "tree": "e0551e2cd5da52bee701e31d51aac02ad78470a1",
  "parents": [
    "5a0a5103dd7dd8fa32e6574a54ffeb30930fadfb"
  ],
  "author": {
    "name": "Andrew Grieve",
    "email": "agrieve@google.com",
    "time": "Wed Nov 08 14:57:14 2023 -0500"
  },
  "committer": {
    "name": "Christoffer Adamsen",
    "email": "christofferqa@google.com",
    "time": "Thu Nov 09 08:04:01 2023 +0000"
  },
  "message": "Add non-default implementation of peekNext() / peekPrevious() where applicable\n\nAnd make IteratorUtils.peekPrevious() return null (instead of throw)\nwhen !iterator.hasPrevious().\n\nThese methods sound like they should not have side-effects, but they\ncan change which value is removed when remove() is called.\n\nE.g.: For A-\u003eB-\u003eC-\u003eD:\nit.next() --\u003e current \u003d A\nit.next() --\u003e current \u003d B\nit.peekNext()\n  it.next() --\u003e current \u003d C\n  it.previous() --\u003e current \u003d C\n\nThis change tries to guard against remove() being called after peek\nmethods by making it trigger InvalidStateException() in most cases.\n\nBug: None\nChange-Id: I224e79043f96ea3028b3d95969bdc0f9e1d2f534",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "54531aff07a5991631440074d5e0f63caf9d3382",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java",
      "new_id": "640d3bdb1fe9de05dda5b022eab1e83fb29d1fab",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java"
    },
    {
      "type": "modify",
      "old_id": "4874229f791dc880940ec9686f5388b798851ada",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionListIterator.java",
      "new_id": "325cea8cd5be1eeca6acbcfb89b72e7bf369d6ac",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionListIterator.java"
    },
    {
      "type": "modify",
      "old_id": "24e7793e3cfa3a33f338555148627ba47d7305df",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/LinearFlowInstructionListIterator.java",
      "new_id": "21ab96c4806e78e59171b46596614e5f24204b99",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/LinearFlowInstructionListIterator.java"
    },
    {
      "type": "modify",
      "old_id": "740c180978543676c5c81663bb8c17cbeb202620",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java",
      "new_id": "e4845caf43f1dc660fe4d9aa43e99aba61df0f61",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java"
    },
    {
      "type": "modify",
      "old_id": "506d1e3b10f41644610da6e75ed83293de0c0f8a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/utils/IteratorUtils.java",
      "new_id": "6730a23af4debcf07f06add84188259cb51be697",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/utils/IteratorUtils.java"
    }
  ]
}
