)]}'
{
  "commit": "bc5b1192b3bfe4ff41452fd7c6d11db22a85faad",
  "tree": "68593b160acfa92bf650fbb256f712975197259a",
  "parents": [
    "638f33bab82500674dc4f3879904200298e47bb7"
  ],
  "author": {
    "name": "Christoffer Quist Adamsen",
    "email": "christofferqa@google.com",
    "time": "Wed Mar 11 15:08:41 2020 +0100"
  },
  "committer": {
    "name": "Christoffer Quist Adamsen",
    "email": "christofferqa@google.com",
    "time": "Wed Mar 11 15:08:41 2020 +0100"
  },
  "message": "Introduce a new InitClass instruction\n\nThis CL introduces a new InitClass instruction that can be used to trigger the class initialization of a given type.\n\nThe instruction can only be used in R8 when a second round of tree shaking will be run. This is because the Enqueuer is used to collect the set of classes that are referenced from an InitClass instruction. For each of these classes, a new static synthetic field $r8$clinit is synthesized by a new class ClassInitFieldSynthesizer, unless the given class already has another static field that can be used.\n\nThe ClassInitFieldSynthesizer produces a InitClassLens that maps each class with an InitClass instruction to the DexField that should be used to trigger class initialization. This is used in application writer, and in particularly, in DexInitClass for implemeting collectIndexedItems() and write().\n\nIt is left for future work to add support for InitClass in the CF backend.\n\nChange-Id: I86702e16c42d5190d9dcec1a1fd3150affe9a89b",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d492e679988c140c77303237a4d2102d5e984825",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/PrintUses.java",
      "new_id": "57f83951f4d43963af5c0b66bfa7c9c022e817fd",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/PrintUses.java"
    },
    {
      "type": "modify",
      "old_id": "3c9c493b86fe636650ed8e591302c509e208af12",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/R8.java",
      "new_id": "eb5ba8eb32d0ddf1682955cc86343682c8153561",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/R8.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9df82853c4f3bc83c05171888933e83a1471db62",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/code/DexInitClass.java"
    },
    {
      "type": "modify",
      "old_id": "d549e28e1c3849a839ba554c5111f28069ac14b3",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/code/Instruction.java",
      "new_id": "ea056cbbc16676ac7a11a2f9f13c3be78040f466",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/code/Instruction.java"
    },
    {
      "type": "modify",
      "old_id": "fe88c5df37d03652f81748629d9c619e5e2bb9f1",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/graph/AppView.java",
      "new_id": "3a062e44092310df9bb0931ba2e3196804ff9d6e",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/graph/AppView.java"
    },
    {
      "type": "modify",
      "old_id": "bb209b57e0e8f7271dfc7138cfa636d5fa0308b5",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/graph/DefaultUseRegistry.java",
      "new_id": "7d6b09591f6623f9a363bd775cd83b22a117255c",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/graph/DefaultUseRegistry.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4f0a854bd78fb5fd06310894cdd5749255091381",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/graph/FinalInitClassLens.java"
    },
    {
      "type": "modify",
      "old_id": "41a5215720d360fe0829c0c9f3ea33792c3ed6b8",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/graph/InitClassLens.java",
      "new_id": "cac3870fe117d7c032c00a14ba5831d58733f79b",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/graph/InitClassLens.java"
    },
    {
      "type": "modify",
      "old_id": "f4525569bd2653146c6fba5d65aa7b1ef92f4dc7",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/graph/UseRegistry.java",
      "new_id": "2c277631dee579c20b96f233dbc84912861c10c7",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/graph/UseRegistry.java"
    },
    {
      "type": "modify",
      "old_id": "80c81e948d9503fda35d736340ff307e59187d54",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java",
      "new_id": "7270d42019f2d281c02fa02d55698ff5bdeef948",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java"
    },
    {
      "type": "modify",
      "old_id": "b8e6950651b4dcb995588cd6b73ad6bc8e404ec7",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/analysis/DeterminismAnalysis.java",
      "new_id": "0fc8bd0e146037ab6b61ccc501e87b5cd5f2eef0",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/analysis/DeterminismAnalysis.java"
    },
    {
      "type": "modify",
      "old_id": "b06a015c2029fd9a6a85bcd076fe91448b1844e9",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java",
      "new_id": "5ddacd6d71e4d58f3d07aa353bf8f8a2434389d4",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java"
    },
    {
      "type": "modify",
      "old_id": "f2cdc93e638998639fb9b1ef0d1a339d320240fd",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/DefaultInstructionVisitor.java",
      "new_id": "fdfbe61a470abb93eff553bb8f15cbd6713e7427",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/DefaultInstructionVisitor.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "667e733efa74fb578940b6d1cb0ca7a60481f78f",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/InitClass.java"
    },
    {
      "type": "modify",
      "old_id": "b1459be6b2632e0d88fc4acd52461cb1c6308544",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/Instruction.java",
      "new_id": "d49e290fae6cef723f6949f295f4aecbcc71c8f1",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/Instruction.java"
    },
    {
      "type": "modify",
      "old_id": "d7b3a83450ad96b930abcb933f79609c34a15a03",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/InstructionVisitor.java",
      "new_id": "4bb29bb66810602de09f629bd7451f58b15827f6",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/InstructionVisitor.java"
    },
    {
      "type": "modify",
      "old_id": "65a09d6a039ddb48e115aa7e2c5d690b99e0b117",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/Opcodes.java",
      "new_id": "a3dc92b0c3a73d63d44bcb2afea567788515312d",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/Opcodes.java"
    },
    {
      "type": "modify",
      "old_id": "9c5a1237a0cd4a6be1ec9e1d6f4e2ddc0aa8408e",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/code/StaticFieldInstruction.java",
      "new_id": "c4b5f358d652b2a52a9e91d6727a90cce0e6b3b1",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/code/StaticFieldInstruction.java"
    },
    {
      "type": "modify",
      "old_id": "25ddb6af9c664d368df4ca508d4271132db8b305",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java",
      "new_id": "6ff7e2f837be9809a1f7b836204cc89aa41db56a",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java"
    },
    {
      "type": "modify",
      "old_id": "3c330351c1f018a245cf6bcbd5ebbca092e5db53",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java",
      "new_id": "9598e95fbcb63acc751a421ca34a0e0c3652e7c0",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java"
    },
    {
      "type": "modify",
      "old_id": "b8b3c4c50d9dc56213dd2046214badf1b0bb6aca",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java",
      "new_id": "06c4bdfe28cc4814a3528932e8dc867e9463c717",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java"
    },
    {
      "type": "modify",
      "old_id": "e4af36c2af3ad997babe2f04eec0e4f7e3f44d1a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java",
      "new_id": "7b53a357274172df81360052e6ac3b9233605bbd",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java"
    },
    {
      "type": "modify",
      "old_id": "4c2a36dbfc13c8bee3c6d734972149dd8e1cbbf4",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java",
      "new_id": "b78757d832f7a8073cc81781edf163d7c25f4ea7",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java"
    },
    {
      "type": "modify",
      "old_id": "e10b121c1454eaeea592f90f5189f2efb017ff2a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java",
      "new_id": "a1307a01284beed5a37e718de0f7c6771e67f4db",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java"
    },
    {
      "type": "modify",
      "old_id": "783ed8a70c57810ba67ba28099178962e481abb3",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java",
      "new_id": "c6a84aac24a6b6572527411d3390dc049006d1b5",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java"
    },
    {
      "type": "modify",
      "old_id": "698818f824ae8f428fa4c8297e05812c767cbb44",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java",
      "new_id": "de9d4ccb0eb8bc99d4cd04055f5b1f1b834cb6c6",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java"
    },
    {
      "type": "modify",
      "old_id": "84e4fdcb0062c6ab0902a22a34c1dc9c6101e286",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java",
      "new_id": "a6a088a589951b0f96605e79e2cd87a9a5ae602c",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java"
    },
    {
      "type": "modify",
      "old_id": "8978657754766b8064a8b8127be92c9f28e401f4",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java",
      "new_id": "3c99a564b626438e38cdf53a377dbff276810736",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java"
    },
    {
      "type": "modify",
      "old_id": "8a6556250cced4f12e7a1b439a32bf3726149ffe",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/optimize/InvokeSingleTargetExtractor.java",
      "new_id": "292f616064d7948f47bd7aa24f8ca29ec07e3e69",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/optimize/InvokeSingleTargetExtractor.java"
    },
    {
      "type": "modify",
      "old_id": "44367e017d37546088d1a5ddda8ce7d725db1944",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java",
      "new_id": "1ca54ba3b566a6df95de0bd62c3680dd6299729a",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "128a695b28c3f92caf49945480d750efb817ba05",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java"
    },
    {
      "type": "modify",
      "old_id": "f35fb94ede6e894eedaff27879fd788591ee8520",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/shaking/DefaultEnqueuerUseRegistry.java",
      "new_id": "db955c9f95625cd59fbb74ab07b17db441cf7e01",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/shaking/DefaultEnqueuerUseRegistry.java"
    },
    {
      "type": "modify",
      "old_id": "593858acba9a3dcd9320786591fcaa2064e9af92",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/shaking/Enqueuer.java",
      "new_id": "e6040a008e86f7fc7c9aa3e6792b7ed9004e4456",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/shaking/Enqueuer.java"
    },
    {
      "type": "modify",
      "old_id": "3a6fcae2d49a8bf1b10c3160a8efd0cfc0fe3589",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java",
      "new_id": "15d4e4be79b48183be6b231735605429fae21af0",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java"
    },
    {
      "type": "modify",
      "old_id": "dc55284e6c093c1fd855df4e0e5f247bc6dcc9f1",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java",
      "new_id": "ef0ce6369e2cc41ae081f157aa9a1836afa70540",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java"
    },
    {
      "type": "modify",
      "old_id": "c3df10f01d3e6f67a7ae5aa6fded8ec4cedf5b1d",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/utils/InternalOptions.java",
      "new_id": "3e447832cba170006690297c2873954db0afc974",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/utils/InternalOptions.java"
    },
    {
      "type": "modify",
      "old_id": "adc1f0b504752d170698c0e3909b19a8f26820ba",
      "old_mode": 33188,
      "old_path": "src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/MemberValuePropagationWithClassInitializationTest.java",
      "new_id": "3090720da85f0d27f51d723cb6816bc5b9f48ee6",
      "new_mode": 33188,
      "new_path": "src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/MemberValuePropagationWithClassInitializationTest.java"
    },
    {
      "type": "modify",
      "old_id": "397c05481bd5209f785b4800738e70ccc9bc1a12",
      "old_mode": 33188,
      "old_path": "src/test/java/com/android/tools/r8/shaking/FieldReadsJasminTest.java",
      "new_id": "0128ec3537eb65d47988285b67c5f3b1c81234ac",
      "new_mode": 33188,
      "new_path": "src/test/java/com/android/tools/r8/shaking/FieldReadsJasminTest.java"
    },
    {
      "type": "modify",
      "old_id": "34013228e68ed380e0a9301bda14f1f533c606d3",
      "old_mode": 33188,
      "old_path": "src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java",
      "new_id": "5cdc80ef6092905b32ca9c155224484147854a9e",
      "new_mode": 33188,
      "new_path": "src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java"
    },
    {
      "type": "modify",
      "old_id": "7331a227925c12c1e80e9169f52126adc5f3e287",
      "old_mode": 33188,
      "old_path": "src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java",
      "new_id": "8786f30ff921d8c87129bb2ecff11c858b4b4f0b",
      "new_mode": 33188,
      "new_path": "src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java"
    },
    {
      "type": "modify",
      "old_id": "b693ad9ccba0ed702ae9d9cee36ced324d82c4d1",
      "old_mode": 33188,
      "old_path": "src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java",
      "new_id": "c8c614247293602dcf9788272afa5c203bc99f92",
      "new_mode": 33188,
      "new_path": "src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java"
    },
    {
      "type": "modify",
      "old_id": "dc65b71e97f4c355fb9d063e5774a3d66e9db5ff",
      "old_mode": 33188,
      "old_path": "src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java",
      "new_id": "fc5c38f30d4a3ef30a74bd8ed33d086c20623aea",
      "new_mode": 33188,
      "new_path": "src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java"
    }
  ]
}
