)]}'
{
  "commit": "ee703da9de3558d0328927be13d4ff3608cbbfb8",
  "tree": "a3da4670ec24bf3ee7181f94b0056e87014817e4",
  "parents": [
    "3cd58547cd54e2351032566ca50af716c98f1497"
  ],
  "author": {
    "name": "Ian Hickson",
    "email": "ian@hixie.ch",
    "time": "Sat Apr 02 10:24:12 2016 -0700"
  },
  "committer": {
    "name": "Ian Hickson",
    "email": "ian@hixie.ch",
    "time": "Sat Apr 02 10:24:12 2016 -0700"
  },
  "message": "Rationalise all our exception handling.\n\n- Create a FlutterErrorDetails struct-like class that describes an\r\n\r\n  exception along with more details that aren\u0027t in the exception, like\r\n\r\n  where it was caught and what was going on when it was caught.\r\n\r\n\r\n\r\n- Provide a FlutterError static API for handling these objects:\r\n\r\n\r\n\r\n  - FlutterError.onError which is called whenever Flutter catches an\r\n\r\n    error.\r\n\r\n\r\n\r\n  - FlutterError.reportError() which handles an error.\r\n\r\n\r\n\r\n  - FlutterError.dumpErrorToConsole() which is the default behavior\r\n\r\n    for onError.\r\n\r\n\r\n\r\n- Removes all the existing exception handler callbacks.\r\n\r\n\r\n\r\n- Replaces all the existing places that described exceptions using\r\n\r\n  debugPrint with calls to FlutterError.reportError().\r\n\r\n\r\n\r\n- Extend lockState() to also catch exceptions, so that we catch\r\n\r\n  exceptions that happen during finalizers.\r\n\r\n\r\n\r\n- Make the test framework catch errors and treat them as failures.\r\n\r\n\r\n\r\n- Provide a mechanism to override this behavior in the test framework.\r\n\r\n\r\n\r\n- Make the tests that used to depend on the exception handler\r\n\r\n  callbacks use this new mechanism.\r\n\r\n\r\n\r\n- Make pump() also support the phase argument.\r\n\r\n\r\n\r\n- Improve some tests using these new features.\r\n\r\n\r\n\r\nFixes #2356, #2988, #2985, #2220.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d71c40168c4d323c9564382a9f26a6b5354c674c",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/gestures/binding.dart",
      "new_id": "b1d9ee56e24120fb7b85e0486e4cc042285a0515",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/gestures/binding.dart"
    },
    {
      "type": "modify",
      "old_id": "5985187f389a892f32603a19d0e2020a31e55164",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/gestures/pointer_router.dart",
      "new_id": "b791b55df11bbe0c0ce6f5d5d4360093daca2cc8",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/gestures/pointer_router.dart"
    },
    {
      "type": "modify",
      "old_id": "af1d8f066aa25c52a41a7072fc9bd66aabda7f5f",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/http/mojo_client.dart",
      "new_id": "2fb4df923951d7f4bf1151fea8e5b6c29b919eee",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/http/mojo_client.dart"
    },
    {
      "type": "modify",
      "old_id": "e20837ac8242f13820067e8d5fb19b2bedf1cef2",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/box.dart",
      "new_id": "bc6c347c5135a740fc35946d33fad622be1f0cf6",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/box.dart"
    },
    {
      "type": "modify",
      "old_id": "77dc0fec86fe7bd8b6a996c29148187b169b026e",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/object.dart",
      "new_id": "f38fc662b60e71bfda611ea94cb32d3cb8f97290",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/object.dart"
    },
    {
      "type": "modify",
      "old_id": "998c4a0195d17efdf7ed077b23a21186e770a054",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/scheduler/scheduler.dart",
      "new_id": "361a2e9a2a3f9f0eaae80620624c40689e508cc9",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/scheduler/scheduler.dart"
    },
    {
      "type": "modify",
      "old_id": "080f356c88599c1a34f3bcba884278978a0d89e4",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/services/assertions.dart",
      "new_id": "d312ebb214089bff58d22330fe69190294be09df",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/services/assertions.dart"
    },
    {
      "type": "modify",
      "old_id": "bf2f7fc1f8a477087964de28d0892e17b4386635",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/services/fetch.dart",
      "new_id": "b4d2a7826370962c475900112f9adea0d364c157",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/services/fetch.dart"
    },
    {
      "type": "modify",
      "old_id": "cb11644e8ef4c2d5ae9aa1f04bd2682a1007251e",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/services/image_resource.dart",
      "new_id": "8537c8dc0db1b8f4871211a96effbeea4878f9ff",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/services/image_resource.dart"
    },
    {
      "type": "modify",
      "old_id": "d07a3e45def86c095f017b5ff1442fad4c7d034e",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/binding.dart",
      "new_id": "a97ad998d8d95441a57c36d3184a9c932bd8aa63",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/binding.dart"
    },
    {
      "type": "modify",
      "old_id": "61ff0acaa2755b63c87299d95ec11e91b2920618",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/framework.dart",
      "new_id": "d73507c4eec3b0e3f240f5e4d6c06c0a65cfde80",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/framework.dart"
    },
    {
      "type": "modify",
      "old_id": "a28449e981806406d9fca125f766b8e3ffb04666",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/mixed_viewport.dart",
      "new_id": "cef35fa1927120aba237db7f03d56f3e9af177b5",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/mixed_viewport.dart"
    },
    {
      "type": "modify",
      "old_id": "204a9a2832dd2b6c3fdf7e97fd41573ebe385c86",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/virtual_viewport.dart",
      "new_id": "eca2c0c4d3571e3e2300ae46bb8849b10bb28019",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/virtual_viewport.dart"
    },
    {
      "type": "modify",
      "old_id": "12e35cbbe06129094ec38e7b158c3bc820f0baad",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/widget/build_scope_test.dart",
      "new_id": "2693fa5c38414584cf9dcec75f29a7c389a3489d",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/widget/build_scope_test.dart"
    },
    {
      "type": "modify",
      "old_id": "a3f0d80a131f7bb51a14cdc665fb07e8d5dbe01e",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/widget/image_test.dart",
      "new_id": "176f14f9e0b195820cf1eabcff207ba44f0614c9",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/widget/image_test.dart"
    },
    {
      "type": "modify",
      "old_id": "491ad45b052bc52ed9191ccd2c3e426eecd67e1e",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/widget/parent_data_test.dart",
      "new_id": "c12c5dd2503735c201e564d868086e8149e2ddc4",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/widget/parent_data_test.dart"
    },
    {
      "type": "modify",
      "old_id": "60cce29938b76997a80318d35b8e744b66f44368",
      "old_mode": 33188,
      "old_path": "packages/flutter_test/lib/src/widget_tester.dart",
      "new_id": "2b24355c15866ddcdd48e2f3cd58797ee099c6d5",
      "new_mode": 33188,
      "new_path": "packages/flutter_test/lib/src/widget_tester.dart"
    }
  ]
}
