)]}'
{
  "commit": "23d3e8a25f08ff0069acaf912a9d26a785dd12ae",
  "tree": "89263a8fe143eca4f70b3355e9932e74df8100e0",
  "parents": [
    "52ae429a9e97e53c310ab5b08ad03043c9341de3"
  ],
  "author": {
    "name": "Mike Fairhurst",
    "email": "mfairhurst@google.com",
    "time": "Wed Jun 12 23:48:48 2019 +0000"
  },
  "committer": {
    "name": "commit-bot@chromium.org",
    "email": "commit-bot@chromium.org",
    "time": "Wed Jun 12 23:48:48 2019 +0000"
  },
  "message": "Land new subtyping algorithm; more tests but still not comprehensive.\n\nIncludes changes to implicit covariance test.\n\nTo redescribe this, for some tear-off C\u003cT\u003e.f, the member type may be\ncontravariant if T is referenced by a parameter of C\u003cT\u003e.f (such as if it\nis of type void Function(T)). This must be a runtime failure if C\u003cT\u003e is\na reference which has been covariantly upcast at runtime. For example,\nList\u003cObject\u003e.add, where the list is at runtime an instance of List\u003cint\u003e,\nresults in a static type of void Function(Object), but a runtime type of\nvoid Function(int), which is unsound.\n\nWe omit these checks, however, when it is trivially sound for all cases\nPreviously, this was the case for tearing off `List\u003cNull\u003e.add`. This is\nno longer a valid test case for NNBD where the runtime type of that list\ncould actually be `List\u003cNever\u003e`.\n\nTherefore the test has been changed to expect `List\u003cNull\u003e.add` to result\nin a cast, and a new NNBD test case has been added to test `List\u003cNever\u003e`\ncases don\u0027t get a cast.\n\nChange-Id: I61d024a249e2c2a249ad5a8037cbe3d103e3ea8b\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/104361\nCommit-Queue: Mike Fairhurst \u003cmfairhurst@google.com\u003e\nReviewed-by: Paul Berry \u003cpaulberry@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7b41701629551c178c1b2991f056003b42557584",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/lib/src/generated/type_system.dart",
      "new_id": "29716e80aed284a0911bdfde624a9ca08b15856c",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/lib/src/generated/type_system.dart"
    },
    {
      "type": "modify",
      "old_id": "7725c55df766a379f979ff5cdc19cf31ab0e781b",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/lib/src/task/strong/checker.dart",
      "new_id": "b286b97664eb89918a0236ca5ae1affb5d122b0a",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/lib/src/task/strong/checker.dart"
    },
    {
      "type": "modify",
      "old_id": "1f4358e33971c37e29bfc9e7d7e99619fadf0992",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/test/generated/strong_mode_test.dart",
      "new_id": "176d24f342a4a96d5d76cf6e4e38b89b51db4736",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/test/generated/strong_mode_test.dart"
    },
    {
      "type": "modify",
      "old_id": "964112f8730d1956e059eba253844334f4711b95",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/test/generated/type_system_test.dart",
      "new_id": "c3df6502dfa4f6f1b8c02be4b05657554980e072",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/test/generated/type_system_test.dart"
    }
  ]
}
