)]}'
{
  "commit": "dc5146bcb7471cccf1828520b7a3a71dbdab1b4c",
  "tree": "2a151455f498593166664e01611a126c0c544570",
  "parents": [
    "c72194c4bb5de83785dfdc4861fe61abed7e7262"
  ],
  "author": {
    "name": "Goktug Gokdogan",
    "email": "goktug@google.com",
    "time": "Tue Mar 24 16:04:18 2015 -0700"
  },
  "committer": {
    "name": "Goktug Gokdogan",
    "email": "goktug@google.com",
    "time": "Tue Mar 24 16:04:18 2015 -0700"
  },
  "message": "Make Closure output more idiomatic\n\nThe following changes result in an 11% improvement in Inbox when\ncompiling with closure.\n\nIn Closure mode, a synthetic constructor is generated where the\ngenerated prototype of the constructor is explicitly assigned to\nreal constructors.\n\nAll members are now assigned explicitly by setting on the prototype\nof the synthesized constructor explicitly (e.g. Foo.prototoype.method)\ninstead of assigning via shared global (e.g. _.method).\n\nThis is because when the Closure compiler sees every method assigned\nas _.method \u003d expr;, it has no idea what \u0027_\u0027 and how to associate\na given method with a given constructor. By changing this to\nFoo.prototype.method \u003d expr, the compiler can now associate\ninstantiations of Foo with liveness of methods assigned to it.\n\nThe GWT compiler now has responsibility for generating all\ngoog.provide statements and setting up empty functions on\ngoog.provided interface types.\n\nThe reason this is done is several fold. The closure compiler\nwill error if any goog.provide happens more than once, and it\nwill error if a goog.provide or a namespace is setup out of\norder (enclosed type before enclosing type). Previously, a linker\nwoud generate all of the goog.provide statements as well as\nsetup stub functions for interfaces. However since linkers can\u0027t\n(easily) insert code in the right order (like setting up a empty\ninterface stub function) in the topologically correct order with\nthose setup by the GWT compiler itself, pushing this reponsibility\nto the compiler removes errors from bad sorting.\n\nAlso, double assigning any namespace causes deoptimization.\nPreviously the linker would pre-pend a bunch of empty stub\nconstructors which are written over by the main GWT module.\n\nWith this patch, now also Closure Mode correctly applies JsInterop\nspec and reaches feature parity to non-Closure mode.\n\nFinally, this is a step along the way to getting rid of the\nlinker, and having GWT output @JsDoc\u0027ed class definitions.\n\nChange-Id: I66aae7a745bb36059f1f0670d2820861527f2fc9\nReview-Link: https://gwt-review.googlesource.com/#/c/12181/\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6d0499c5acaea4b9569f0770ece50ea58ef8f3fc",
      "old_mode": 33188,
      "old_path": "dev/core/src/com/google/gwt/dev/DevMode.java",
      "new_id": "07d41b75b1b92bd111ed9a8003fe9c4354899c8a",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/DevMode.java"
    },
    {
      "type": "modify",
      "old_id": "c6ffa93e8560111a933ccc43695c4261c31ff399",
      "old_mode": 33188,
      "old_path": "dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java",
      "new_id": "6c6337a36e1babc6f14638992381ec2b2e0f2cef",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "33054b8ab6446e8615c15100567647484213b3d0",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/jjs/impl/ClosureJsInteropExportsGenerator.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0c23173cfef3566bf94d4147d4c796eea76838f5",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/jjs/impl/DefaultJsInteropExportsGenerator.java"
    },
    {
      "type": "modify",
      "old_id": "b7b475aa5c109d3a465e3ff16d1525bc6e515961",
      "old_mode": 33188,
      "old_path": "dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java",
      "new_id": "6bea4fd6ff6d79442f71903c3a17c1c84d71ace1",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9740058296b26b4a1aa5c8077d4ae23767a9800a",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropExportsGenerator.java"
    },
    {
      "type": "modify",
      "old_id": "fa8bbd6dc84f1d71c65ee5119bd090ad53dd1019",
      "old_mode": 33188,
      "old_path": "dev/core/src/com/google/gwt/dev/js/JsUtils.java",
      "new_id": "9107f1a6fd64bfd7fa92107049e84fb1fcf6e29e",
      "new_mode": 33188,
      "new_path": "dev/core/src/com/google/gwt/dev/js/JsUtils.java"
    },
    {
      "type": "modify",
      "old_id": "f3360db8f8ade42e2c57ff1549927ca868786a52",
      "old_mode": 33188,
      "old_path": "dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java",
      "new_id": "cc58ae12772f3a62e288b6e43fb4712fe3e999e4",
      "new_mode": 33188,
      "new_path": "dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java"
    },
    {
      "type": "modify",
      "old_id": "59b517151c2ecbe695a716a1cb437068ab5eb2a9",
      "old_mode": 33188,
      "old_path": "user/src/com/google/gwt/junit/JUnit.gwt.xml",
      "new_id": "4bfaac9acc2c8c4bd5b9578ba5df7cc3fdab49dc",
      "new_mode": 33188,
      "new_path": "user/src/com/google/gwt/junit/JUnit.gwt.xml"
    },
    {
      "type": "modify",
      "old_id": "b43614ab78cb6da5d518715f19106bd0cf723ef8",
      "old_mode": 33188,
      "old_path": "user/src/com/google/gwt/junit/JUnitShell.java",
      "new_id": "fd5f55274543fc604927cad059624d0867bbb1a2",
      "new_mode": 33188,
      "new_path": "user/src/com/google/gwt/junit/JUnitShell.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b299c9ca148bf667117c191b3e1df576a32b7e80",
      "new_mode": 33188,
      "new_path": "user/src/com/google/gwt/junit/linker/ClosureHelpersLinker.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "af1d2205df612e5bce83d55059d440c6827111c7",
      "new_mode": 33188,
      "new_path": "user/src/com/google/gwt/junit/linker/closurehelpers.js"
    },
    {
      "type": "modify",
      "old_id": "3251aae58edae53555c799b2712edff873984673",
      "old_mode": 33188,
      "old_path": "user/test/com/google/gwt/core/client/interop/JsExportTest.java",
      "new_id": "3b671eaca0af70d73554bb044b08bdade3bcb42b",
      "new_mode": 33188,
      "new_path": "user/test/com/google/gwt/core/client/interop/JsExportTest.java"
    },
    {
      "type": "modify",
      "old_id": "2384b658122442ebc1af30933b784fa34fffc538",
      "old_mode": 33188,
      "old_path": "user/test/com/google/gwt/core/client/interop/MyClassExportsConstructors.java",
      "new_id": "138e091f4fb3c14ad9076197ca718883f035ad24",
      "new_mode": 33188,
      "new_path": "user/test/com/google/gwt/core/client/interop/MyClassExportsConstructors.java"
    }
  ]
}
