)]}'
{
  "commit": "c436f5104454614725aade834c6cb6e1e14a9480",
  "tree": "e55c71e3f5b3c700b76547aa429ab285181ab20b",
  "parents": [
    "80d0375e5e2fad25b5b9e7b2fca2c8de7bf41dd4"
  ],
  "author": {
    "name": "Martin Fick",
    "email": "mfick@codeaurora.org",
    "time": "Tue May 25 09:15:54 2021 -0600"
  },
  "committer": {
    "name": "Martin Fick",
    "email": "mfick@codeaurora.org",
    "time": "Mon Jan 10 21:25:29 2022 -0700"
  },
  "message": "Make Expander inherit AbstractExpander\n\nPreviously RecursiveExpander avoided inheriting from Expander in favor\nof composition. This required users to use both an Expander and a\nRecursiveExpander depending on what they were doing with the properties.\nHowever it turns out that it was not always clear when it was OK to use\njust an Expander, it required being sure that all the referenced\nproperties were already expanded. Yet the Expander was the only class\nproviding object expansion so both classes were needed. These two\nclasses aren\u0027t really independent.\n\nRedesign the expanders to consist of a full featured Expander, with a\npublic API, based on an AbstractExpander providing basic functionality\nneeded for expansion. This makes the Expander a single class to\ninterface with, which works easily without requiring expansion order\nknowledge, all while still separating out base functionality into a\nseparate class from the more policy based class.\n\nChange-Id: Ia1a3403ae4a43b683bb3f2f6f381bebbc3c2e997\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6216841cc025574a2a8543ef2fa1c57b5d09264a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/Properties.java",
      "new_id": "b90ca14456c5e1e4fb66fac431c635c3629389ef",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/Properties.java"
    }
  ]
}
