)]}'
{
  "commit": "a45d260ea45524ae25df3b3a78726097c939daaf",
  "tree": "e5c8de73e46209a4d42f07cb328c336c2575f063",
  "parents": [
    "70942e50c115c38e56adacabd6da2c9b8a01e8e9"
  ],
  "author": {
    "name": "Sam McCall",
    "email": "sammccall@google.com",
    "time": "Fri Apr 28 13:20:15 2023 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Fri Apr 28 13:21:09 2023 -0700"
  },
  "message": "For classes nested in template classes, include outer tparams in nullability\n\nGiven `template \u003cclass T\u003e struct X { struct Y {}; };`\nY can depend on T in the same ways that X can.\nTherefore the nullability of T is part of Y\u0027s nullability too.\n\nFor now, there\u0027s no observable effect except that the nullability vectors are the right length, padded with Unspecified, but we\u0027re building towards nested template support.\n - when we walk up the redecl chain there is no sugar.\n   My other patch will provide this in some cases (\"Resugar substituted type params found in class template instantiations\"), we need to look up the template args in the instantiation context.\n - we don\u0027t consume the outer class nullability anywhere. We will be able to do this around substituteNullabilityAnnotationsInClassTemplate, addressing TODOs about nested templates. This will require some restructuring as we don\u0027t actually whether the inner class is a template anymore.\n\nPiperOrigin-RevId: 527969535\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "42ff8065fdddd99050ace4c62cda7f11ad80d27d",
      "old_mode": 33188,
      "old_path": "nullability_verification/pointer_nullability.cc",
      "new_id": "28b0e67977cac98067c43dbbbe4724960cc2fac1",
      "new_mode": 33188,
      "new_path": "nullability_verification/pointer_nullability.cc"
    },
    {
      "type": "modify",
      "old_id": "58a7512bbadaf376ad76090fce3f6fa0d082b826",
      "old_mode": 33188,
      "old_path": "nullability_verification/pointer_nullability.h",
      "new_id": "b2f4ae3f5730bfafdf118a7ded4e6107b7db3a0d",
      "new_mode": 33188,
      "new_path": "nullability_verification/pointer_nullability.h"
    },
    {
      "type": "modify",
      "old_id": "b5e878f89f5c933f4dba696b942678b6b8d3423d",
      "old_mode": 33188,
      "old_path": "nullability_verification/pointer_nullability_analysis.cc",
      "new_id": "9479b847482540abe9eb751c62aff53a6491b6f9",
      "new_mode": 33188,
      "new_path": "nullability_verification/pointer_nullability_analysis.cc"
    },
    {
      "type": "modify",
      "old_id": "507f4e9b6eec4176d6fdbc05d70558e1be9001b3",
      "old_mode": 33188,
      "old_path": "nullability_verification/pointer_nullability_test.cc",
      "new_id": "5f59121221aae16ca99f8218821e1ad7510bd72b",
      "new_mode": 33188,
      "new_path": "nullability_verification/pointer_nullability_test.cc"
    }
  ]
}
