)]}'
{
  "commit": "39c9e6ced3439c3d75e39959ae4cd018464a67e0",
  "tree": "7ee359f4a3f11ee192c875131f7516d42619fc40",
  "parents": [
    "a97b924f35a37a108ed66612bba4ee1066a96e34"
  ],
  "author": {
    "name": "Ye Wang",
    "email": "leafwang@google.com",
    "time": "Wed Mar 04 17:16:45 2015 -0800"
  },
  "committer": {
    "name": "Ye Wang",
    "email": "leafwang@google.com",
    "time": "Wed Mar 04 17:16:45 2015 -0800"
  },
  "message": "Fix bugs in Lambda with nested scopes.\n\nThere are two places where we tried to find outer variable bindings\nof a lambda in current method context but we did it wrong.\n\n1). In GwtAstBuilder.resolveNameReference,\nWhen a lambda expression has a block method body,\nFor example, {int x \u003d 0; () -\u003e {int t \u003d x; return t;}; },\na wrong path was executed. The reason is that for the condition\nscope.isLambdaScope(), only MethodScope may return true,\nand BlockScope (here {int t \u003d x; return t;}) always returns false.\n\n2). In GwtAstBuilder.replaceLambdaWithInnerClassAllocation,\nFor nested lambdas, for example,\nx \u003d 0;\ncall(sam1 -\u003e {call(sam2 -\u003e {x;});});\nLocalVariableBinding of x in the inner lambda (sam2-\u003e{x;})\nis different from the binding of x in the outer lambda.\nSo we cannot get the JVariable from the outer lambda. But they\nrefer to the same actual outer variable. So to fix it, we compare\nthe actual outer variable to get the corresponding variable.\n\nBug: issue 9038.\nChange-Id: I974d7fa0e40bff08493195c7293b76d2668dcbb8\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "853c8f0d32afb5793378214d0be1658a832fafba",
      "old_mode": 33188,
      "old_path": "dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java",
      "new_id": "ca13e5e073ed172bbc2b23d5943daf0debe640f1",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java"
    },
    {
      "type": "modify",
      "old_id": "069703b9dd863d9bad5dd523d44cc6d5c56b427b",
      "old_mode": 33188,
      "old_path": "dev/core/test/com/google/gwt/dev/jjs/impl/Java8AstTest.java",
      "new_id": "695c224f82a78561543d84e34fb95f8310228247",
      "new_mode": 33188,
      "new_path": "dev/core/test/com/google/gwt/dev/jjs/impl/Java8AstTest.java"
    },
    {
      "type": "modify",
      "old_id": "cfdb77f4b1501cc15741ec8d9b72dcce244a032e",
      "old_mode": 33188,
      "old_path": "user/test-super/com/google/gwt/dev/jjs/super/com/google/gwt/dev/jjs/test/Java8Test.java",
      "new_id": "ad5ed5af088593ac63ed64b1ede624d3fd90d0e2",
      "new_mode": 33188,
      "new_path": "user/test-super/com/google/gwt/dev/jjs/super/com/google/gwt/dev/jjs/test/Java8Test.java"
    },
    {
      "type": "modify",
      "old_id": "a50dc0fe1dae3de177aa866eef50914f847c2c2c",
      "old_mode": 33188,
      "old_path": "user/test/com/google/gwt/dev/jjs/test/Java8Test.java",
      "new_id": "05dca4cc57fe5ca4dd4ffed4185f5c531e07afd5",
      "new_mode": 33188,
      "new_path": "user/test/com/google/gwt/dev/jjs/test/Java8Test.java"
    }
  ]
}
