Revert "Use a pool for DexDebugEvents."

This reverts commit 5ac4de3d63faaf09806e9bd93dc038bc0f2d7541.

Change-Id: Icce64cd5c7252abd606f4e7d1a39acbce1e6affc
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 2866814..a4cd4db 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -109,8 +109,7 @@
     if (!options.skipDebugInfoOpt && (application.getProguardMap() != null)) {
       try {
         timing.begin("DebugStripper");
-        DebugStripper stripper =
-            new DebugStripper(application.getProguardMap(), options, appInfo.dexItemFactory);
+        DebugStripper stripper = new DebugStripper(application.getProguardMap(), options);
         application.classes().forEach(stripper::processClass);
       } finally {
         timing.end();
diff --git a/src/main/java/com/android/tools/r8/dex/DexFileReader.java b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
index ab11f51..a38d397 100644
--- a/src/main/java/com/android/tools/r8/dex/DexFileReader.java
+++ b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
@@ -24,6 +24,7 @@
 import com.android.tools.r8.graph.DexCode.TryHandler;
 import com.android.tools.r8.graph.DexCode.TryHandler.TypeAddrPair;
 import com.android.tools.r8.graph.DexDebugEvent;
+import com.android.tools.r8.graph.DexDebugEvent.SetEpilogueBegin;
 import com.android.tools.r8.graph.DexDebugInfo;
 import com.android.tools.r8.graph.DexEncodedAnnotation;
 import com.android.tools.r8.graph.DexEncodedArray;
@@ -439,10 +440,10 @@
     for (int head = file.getUbyte(); head != Constants.DBG_END_SEQUENCE; head = file.getUbyte()) {
       switch (head) {
         case Constants.DBG_ADVANCE_PC:
-          events.add(dexItemFactory.createAdvancePC(file.getUleb128()));
+          events.add(new DexDebugEvent.AdvancePC(file.getUleb128()));
           break;
         case Constants.DBG_ADVANCE_LINE:
-          events.add(dexItemFactory.createAdvanceLine(file.getSleb128()));
+          events.add(new DexDebugEvent.AdvanceLine(file.getSleb128()));
           break;
         case Constants.DBG_START_LOCAL: {
           int registerNum = file.getUleb128();
@@ -468,30 +469,30 @@
           break;
         }
         case Constants.DBG_END_LOCAL: {
-          events.add(dexItemFactory.createEndLocal(file.getUleb128()));
+          events.add(new DexDebugEvent.EndLocal(file.getUleb128()));
           break;
         }
         case Constants.DBG_RESTART_LOCAL: {
-          events.add(dexItemFactory.createRestartLocal(file.getUleb128()));
+          events.add(new DexDebugEvent.RestartLocal(file.getUleb128()));
           break;
         }
         case Constants.DBG_SET_PROLOGUE_END: {
-          events.add(dexItemFactory.createSetPrologueEnd());
+          events.add(new DexDebugEvent.SetPrologueEnd());
           break;
         }
         case Constants.DBG_SET_EPILOGUE_BEGIN: {
-          events.add(dexItemFactory.createSetEpilogueBegin());
+          events.add(new SetEpilogueBegin());
           break;
         }
         case Constants.DBG_SET_FILE: {
           int nameIdx = file.getUleb128p1();
           DexString sourceFile = nameIdx == NO_INDEX ? null : indexedItems.getString(nameIdx);
-          events.add(dexItemFactory.createSetFile(sourceFile));
+          events.add(new DexDebugEvent.SetFile(sourceFile));
           break;
         }
         default: {
           assert head >= 0x0a && head <= 0xff;
-          events.add(dexItemFactory.createDefault(head));
+          events.add(new DexDebugEvent.Default(head));
         }
       }
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
index 572e655..b8bab7e 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
@@ -41,7 +41,7 @@
       writer.putUleb128(delta);
     }
 
-    AdvancePC(int delta) {
+    public AdvancePC(int delta) {
       this.delta = delta;
     }
 
@@ -68,7 +68,7 @@
 
   public static class SetPrologueEnd extends DexDebugEvent {
 
-    SetPrologueEnd() {
+    public SetPrologueEnd() {
     }
 
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
@@ -96,7 +96,7 @@
 
   public static class SetEpilogueBegin extends DexDebugEvent {
 
-    SetEpilogueBegin() {
+    public SetEpilogueBegin() {
     }
 
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
@@ -124,7 +124,7 @@
 
     final int delta;
 
-    AdvanceLine(int delta) {
+    public AdvanceLine(int delta) {
       this.delta = delta;
     }
 
@@ -233,7 +233,7 @@
 
     final int registerNum;
 
-    EndLocal(int registerNum) {
+    public EndLocal(int registerNum) {
       this.registerNum = registerNum;
     }
 
@@ -265,7 +265,7 @@
 
     final int registerNum;
 
-    RestartLocal(int registerNum) {
+    public RestartLocal(int registerNum) {
       this.registerNum = registerNum;
     }
 
@@ -297,7 +297,7 @@
 
     final DexString fileName;
 
-    SetFile(DexString fileName) {
+    public SetFile(DexString fileName) {
       this.fileName = fileName;
     }
 
@@ -334,7 +334,7 @@
 
     final int value;
 
-    Default(int value) {
+    public Default(int value) {
       assert (value >= Constants.DBG_FIRST_SPECIAL) && (value <= Constants.DBG_LAST_SPECIAL);
       this.value = value;
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index 26349c2..5295c55 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -40,8 +40,6 @@
 
   private final DexMethod method;
 
-  private final DexItemFactory dexItemFactory;
-
   // Previous and current position info to delay emitting position changes.
   private final PositionState previous;
   private final PositionState current;
@@ -61,9 +59,8 @@
 
   private int startLine = NO_LINE_INFO;
 
-  public DexDebugEventBuilder(DexMethod method, DexItemFactory dexItemFactory) {
+  public DexDebugEventBuilder(DexMethod method) {
     this.method = method;
-    this.dexItemFactory = dexItemFactory;
     arguments = new ArrayList<>(method.proto.parameters.values.length);
     current = new PositionState();
     previous = new PositionState();
@@ -150,16 +147,16 @@
     assert pcDelta >= 0;
     if (current.file != previous.file) {
       assert current.file == null || !current.file.equals(previous.file);
-      events.add(dexItemFactory.createSetFile(current.file));
+      events.add(new SetFile(current.file));
     }
     if (lineDelta < Constants.DBG_LINE_BASE
         || lineDelta - Constants.DBG_LINE_BASE >= Constants.DBG_LINE_RANGE) {
-      events.add(dexItemFactory.createAdvanceLine(lineDelta));
+      events.add(new AdvanceLine(lineDelta));
       // TODO(herhut): To be super clever, encode only the part that is above limit.
       lineDelta = 0;
     }
     if (pcDelta >= Constants.DBG_ADDRESS_RANGE) {
-      events.add(dexItemFactory.createAdvancePC(pcDelta));
+      events.add(new AdvancePC(pcDelta));
       pcDelta = 0;
     }
     // TODO(herhut): Maybe only write this one if needed (would differ from DEX).
@@ -167,7 +164,7 @@
         0x0a + (lineDelta - Constants.DBG_LINE_BASE) + Constants.DBG_LINE_RANGE * pcDelta;
     assert specialOpcode >= 0x0a;
     assert specialOpcode <= 0xff;
-    events.add(dexItemFactory.createDefault(specialOpcode));
+    events.add(new Default(specialOpcode));
     previous.pc = current.pc;
     previous.line = current.line;
     previous.file = current.file;
@@ -181,7 +178,7 @@
     SortedSet<Integer> positionRegisters = new TreeSet<>(current.locals.keySet());
     for (Integer register : currentRegisters) {
       if (!positionRegisters.contains(register)) {
-        events.add(dexItemFactory.createEndLocal(register));
+        events.add(new EndLocal(register));
         openLocals.put(register, null);
       }
     }
@@ -191,7 +188,7 @@
       if (currentLocal != positionLocal) {
         openLocals.put(register, positionLocal);
         if (currentLocal == null && lastKnownLocals.get(register) == positionLocal) {
-          events.add(dexItemFactory.createRestartLocal(register));
+          events.add(new RestartLocal(register));
         } else {
           events.add(new StartLocal(register, positionLocal));
           lastKnownLocals.put(register, positionLocal);
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 8b86ca8..5ea8edd 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -121,17 +121,15 @@
         : code.asDexCode().buildIR(this, valueNumberGenerator, options);
   }
 
-  public void setCode(
-      IRCode ir, RegisterAllocator registerAllocator, DexItemFactory dexItemFactory) {
-    final DexBuilder builder = new DexBuilder(ir, registerAllocator, dexItemFactory);
+  public void setCode(IRCode ir, RegisterAllocator registerAllocator) {
+    final DexBuilder builder = new DexBuilder(ir, registerAllocator);
     code = builder.build(method.proto.parameters.values.length);
   }
 
   // Replaces the dex code in the method by setting code to result of compiling the IR.
   public void setCode(IRCode ir, RegisterAllocator registerAllocator,
-      DexItemFactory dexItemFactory, DexString firstJumboString) {
-    final DexBuilder builder =
-        new DexBuilder(ir, registerAllocator, dexItemFactory, firstJumboString);
+      DexString firstJumboString) {
+    final DexBuilder builder = new DexBuilder(ir, registerAllocator, firstJumboString);
     code = builder.build(method.proto.parameters.values.length);
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index 5a5b555..ce974ce 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -4,17 +4,8 @@
 package com.android.tools.r8.graph;
 
 import com.android.tools.r8.dex.Constants;
-import com.android.tools.r8.graph.DexDebugEvent.AdvanceLine;
-import com.android.tools.r8.graph.DexDebugEvent.AdvancePC;
-import com.android.tools.r8.graph.DexDebugEvent.Default;
-import com.android.tools.r8.graph.DexDebugEvent.EndLocal;
-import com.android.tools.r8.graph.DexDebugEvent.RestartLocal;
-import com.android.tools.r8.graph.DexDebugEvent.SetEpilogueBegin;
-import com.android.tools.r8.graph.DexDebugEvent.SetFile;
-import com.android.tools.r8.graph.DexDebugEvent.SetPrologueEnd;
 import com.android.tools.r8.graph.DexMethodHandle.MethodHandleType;
 import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.utils.IntHashMap;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -34,16 +25,6 @@
   private final Map<DexCallSite, DexCallSite> callSites = new HashMap<>();
   private final Map<DexMethodHandle, DexMethodHandle> methodHandles = new HashMap<>();
 
-  // DexDebugEvent Canonicalization.
-  private final IntHashMap<AdvanceLine> advanceLines = new IntHashMap<>();
-  private final IntHashMap<AdvancePC> advancePCs = new IntHashMap<>();
-  private final IntHashMap<Default> defaults = new IntHashMap<>();
-  private final IntHashMap<EndLocal> endLocals = new IntHashMap<>();
-  private final IntHashMap<RestartLocal> restartLocals = new IntHashMap<>();
-  private final SetEpilogueBegin setEpilogueBegin = new SetEpilogueBegin();
-  private final SetPrologueEnd setPrologueEnd = new SetPrologueEnd();
-  private final Map<DexString, SetFile> setFiles = new HashMap<>();
-
   boolean sorted = false;
 
   public static final DexType catchAllType = new DexType(new DexString("CATCH_ALL"));
@@ -325,80 +306,6 @@
     return createMethod(clazz, proto, name);
   }
 
-  public AdvanceLine createAdvanceLine(int delta) {
-    synchronized (advanceLines) {
-      AdvanceLine result = advanceLines.get(delta);
-      if (result == null) {
-        result = new AdvanceLine(delta);
-        advanceLines.put(delta, result);
-      }
-      return result;
-    }
-  }
-
-  public AdvancePC createAdvancePC(int delta) {
-    synchronized (advancePCs) {
-      AdvancePC result = advancePCs.get(delta);
-      if (result == null) {
-        result = new AdvancePC(delta);
-        advancePCs.put(delta, result);
-      }
-      return result;
-    }
-  }
-
-  public Default createDefault(int value) {
-    synchronized (defaults) {
-      Default result = defaults.get(value);
-      if (result == null) {
-        result = new Default(value);
-        defaults.put(value, result);
-      }
-      return result;
-    }
-  }
-
-  public EndLocal createEndLocal(int registerNum) {
-    synchronized (endLocals) {
-      EndLocal result = endLocals.get(registerNum);
-      if (result == null) {
-        result = new EndLocal(registerNum);
-        endLocals.put(registerNum, result);
-      }
-      return result;
-    }
-  }
-
-  public RestartLocal createRestartLocal(int registerNum) {
-    synchronized (restartLocals) {
-      RestartLocal result = restartLocals.get(registerNum);
-      if (result == null) {
-        result = new RestartLocal(registerNum);
-        restartLocals.put(registerNum, result);
-      }
-      return result;
-    }
-  }
-
-  public SetEpilogueBegin createSetEpilogueBegin() {
-    return setEpilogueBegin;
-  }
-
-  public SetPrologueEnd createSetPrologueEnd() {
-    return setPrologueEnd;
-  }
-
-  public SetFile createSetFile(DexString fileName) {
-    synchronized (setFiles) {
-      SetFile result = setFiles.get(fileName);
-      if (result == null) {
-        result = new SetFile(fileName);
-        setFiles.put(fileName, result);
-      }
-      return result;
-    }
-  }
-
   public boolean isConstructor(DexMethod method) {
     return method.name == constructorMethodName;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 4484aec..511f36b 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -74,8 +74,6 @@
   // The register allocator providing register assignments for the code to build.
   private final RegisterAllocator registerAllocator;
 
-  private final DexItemFactory dexItemFactory;
-
   // List of information about switch payloads that have to be created at the end of the
   // dex code.
   private final List<SwitchPayloadInfo> switchPayloadInfos = new ArrayList<>();
@@ -107,24 +105,19 @@
 
   BasicBlock nextBlock;
 
-  public DexBuilder(IRCode ir, RegisterAllocator registerAllocator, DexItemFactory dexItemFactory) {
+  public DexBuilder(IRCode ir, RegisterAllocator registerAllocator) {
     assert ir != null;
     assert registerAllocator != null;
-    assert dexItemFactory != null;
     this.ir = ir;
     this.registerAllocator = registerAllocator;
-    this.dexItemFactory = dexItemFactory;
     this.firstJumboString = null;
   }
 
-  public DexBuilder(IRCode ir, RegisterAllocator registerAllocator,
-      DexItemFactory dexItemFactory, DexString firstJumboString) {
+  public DexBuilder(IRCode ir, RegisterAllocator registerAllocator, DexString firstJumboString) {
     assert ir != null;
     assert registerAllocator != null;
-    assert dexItemFactory != null;
     this.ir = ir;
     this.registerAllocator = registerAllocator;
-    this.dexItemFactory = dexItemFactory;
     this.firstJumboString = firstJumboString;
   }
 
@@ -191,8 +184,7 @@
     } while (!ifsNeedingRewrite.isEmpty());
 
     // Build instructions.
-    DexDebugEventBuilder debugEventBuilder =
-        new DexDebugEventBuilder(ir.method.method, dexItemFactory);
+    DexDebugEventBuilder debugEventBuilder = new DexDebugEventBuilder(ir.method.method);
     List<Instruction> dexInstructions = new ArrayList<>(numberOfInstructions);
     int instructionOffset = 0;
     InstructionIterator instructionIterator = ir.instructionIterator();
@@ -1132,4 +1124,4 @@
       this.dex = dex;
     }
   }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index fa7ee4d..d4b03e3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -316,7 +316,7 @@
     }
     assert code.isConsistentSSA();
     RegisterAllocator registerAllocator = performRegisterAllocation(code, method);
-    method.setCode(code, registerAllocator, appInfo.dexItemFactory);
+    method.setCode(code, registerAllocator);
     if (Log.ENABLED) {
       Log.debug(getClass(), "Resulting dex code for %s:\n%s",
           method.toSourceString(), logCode(options, method));
@@ -448,7 +448,7 @@
     printMethod(code, "Optimized IR (SSA)");
     // Perform register allocation.
     RegisterAllocator registerAllocator = performRegisterAllocation(code, method);
-    method.setCode(code, registerAllocator, appInfo.dexItemFactory);
+    method.setCode(code, registerAllocator);
     updateHighestSortingStrings(method);
     if (Log.ENABLED) {
       Log.debug(getClass(), "Resulting dex code for %s:\n%s",
@@ -502,7 +502,7 @@
 
     // Perform register allocation.
     RegisterAllocator registerAllocator = performRegisterAllocation(code, method);
-    method.setCode(code, registerAllocator, appInfo.dexItemFactory, firstJumboString);
+    method.setCode(code, registerAllocator, firstJumboString);
 
     if (Log.ENABLED) {
       Log.debug(getClass(), "Resulting dex code for %s:\n%s",
diff --git a/src/main/java/com/android/tools/r8/optimize/DebugStripper.java b/src/main/java/com/android/tools/r8/optimize/DebugStripper.java
index 50dff66..d045f76 100644
--- a/src/main/java/com/android/tools/r8/optimize/DebugStripper.java
+++ b/src/main/java/com/android/tools/r8/optimize/DebugStripper.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.graph.DexDebugEventBuilder;
 import com.android.tools.r8.graph.DexDebugInfo;
 import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexString;
@@ -30,13 +29,10 @@
 
   private final ClassNameMapper classNameMapper;
   private final InternalOptions options;
-  private final DexItemFactory dexItemFactory;
 
-  public DebugStripper(
-      ClassNameMapper classNameMapper, InternalOptions options, DexItemFactory dexItemFactory) {
+  public DebugStripper(ClassNameMapper classNameMapper, InternalOptions options) {
     this.classNameMapper = classNameMapper;
     this.options = options;
-    this.dexItemFactory = dexItemFactory;
   }
 
   private String descriptorToName(String descriptor) {
@@ -72,7 +68,7 @@
     // Maintain line and address but only when entering or leaving a range of line numbers
     // that pertains to a different method body.
     Range currentRange = naming.topLevelRange;
-    DexDebugEventBuilder builder = new DexDebugEventBuilder(method, dexItemFactory);
+    DexDebugEventBuilder builder = new DexDebugEventBuilder(method);
     // Always start with a no-op bytecode to make sure that the start-line is manifested by
     // the Dalvik VM and the event based processing in R8. This also avoids empty bytecode
     // sequences.
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index 7c75610..7840b6e 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -283,7 +283,7 @@
                 code);
         IRCode ir = code.buildIR(method, options);
         RegisterAllocator allocator = new LinearScanRegisterAllocator(ir);
-        method.setCode(ir, allocator, factory);
+        method.setCode(ir, allocator);
         virtualMethods[i] = method;
       }
       builder.addClassPromise(