Account for code lens in dex writer

Change-Id: I89963ce0c9cbe54761a4c6d71d816674cb98da9c
diff --git a/src/main/java/com/android/tools/r8/dex/DebugBytecodeWriter.java b/src/main/java/com/android/tools/r8/dex/DebugBytecodeWriter.java
index e314417..0b4b15c 100644
--- a/src/main/java/com/android/tools/r8/dex/DebugBytecodeWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/DebugBytecodeWriter.java
@@ -16,19 +16,24 @@
 
   private final ObjectToOffsetMapping mapping;
   private final GraphLens graphLens;
+  private final GraphLens codeLens;
   private final DexDebugInfoForWriting info;
   private ByteBuffer buffer;
 
   public DebugBytecodeWriter(
-      DexDebugInfoForWriting info, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+      DexDebugInfoForWriting info,
+      ObjectToOffsetMapping mapping,
+      GraphLens graphLens,
+      GraphLens codeLens) {
     this.info = info;
     this.mapping = mapping;
     this.graphLens = graphLens;
+    this.codeLens = codeLens;
     this.buffer = ByteBuffer.allocate(info.estimatedWriteSize());
   }
 
   public byte[] generate() {
-    info.write(this, mapping, graphLens);
+    info.write(this, mapping, graphLens, codeLens);
     return Arrays.copyOf(buffer.array(), buffer.position());
   }
 
diff --git a/src/main/java/com/android/tools/r8/dex/FileWriter.java b/src/main/java/com/android/tools/r8/dex/FileWriter.java
index 0744b77..3aa1c44 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -235,10 +235,10 @@
       layout.setDebugInfosOffset(dest.align(1));
       Set<DexDebugInfoForWriting> seen = new HashSet<>(mixedSectionOffsets.getDebugInfos().size());
       for (ProgramMethod method : codes) {
-        DexDebugInfoForWriting info =
-            method.getDefinition().getCode().asDexWritableCode().getDebugInfoForWriting();
+        DexWritableCode code = method.getDefinition().getCode().asDexWritableCode();
+        DexDebugInfoForWriting info = code.getDebugInfoForWriting();
         if (info != null && seen.add(info)) {
-          writeDebugItem(info);
+          writeDebugItem(code, info);
         }
       }
     }
@@ -485,6 +485,7 @@
   }
 
   private int sizeOfCodeItem(DexWritableCode code) {
+    GraphLens codeLens = code.getCodeLens(appView);
     int result = 16;
     int insnSize = code.codeSizeInBytes();
     result += insnSize * 2;
@@ -497,7 +498,7 @@
         result += LebUtils
             .sizeAsSleb128(hasCatchAll ? -handler.pairs.length : handler.pairs.length);
         for (TypeAddrPair pair : handler.pairs) {
-          result += sizeAsUleb128(mapping.getOffsetFor(pair.getType(graphLens)));
+          result += sizeAsUleb128(mapping.getOffsetFor(pair.getType(graphLens, codeLens)));
           result += sizeAsUleb128(pair.addr);
         }
         if (hasCatchAll) {
@@ -562,12 +563,14 @@
         mixedSectionOffsets.getOffsetFor(mixedSectionOffsets.getStaticFieldValuesForClass(clazz)));
   }
 
-  private void writeDebugItem(DexDebugInfoForWriting debugInfo) {
+  private void writeDebugItem(DexWritableCode code, DexDebugInfoForWriting debugInfo) {
+    GraphLens codeLens = code.getCodeLens(appView);
     mixedSectionOffsets.setOffsetFor(debugInfo, dest.position());
-    dest.putBytes(new DebugBytecodeWriter(debugInfo, mapping, graphLens).generate());
+    dest.putBytes(new DebugBytecodeWriter(debugInfo, mapping, graphLens, codeLens).generate());
   }
 
   private int writeCodeItem(ProgramMethod method, DexWritableCode code) {
+    GraphLens codeLens = code.getCodeLens(appView);
     int codeOffset = dest.align(4);
     mixedSectionOffsets.setOffsetFor(method.getDefinition(), codeOffset);
     // Fixed size header information.
@@ -600,9 +603,9 @@
         boolean hasCatchAll = handler.catchAllAddr != TryHandler.NO_HANDLER;
         dest.putSleb128(hasCatchAll ? -handler.pairs.length : handler.pairs.length);
         for (TypeAddrPair pair : handler.pairs) {
-          dest.putUleb128(mapping.getOffsetFor(pair.getType(graphLens)));
+          dest.putUleb128(mapping.getOffsetFor(pair.getType(graphLens, codeLens)));
           dest.putUleb128(pair.addr);
-          desugaredLibraryCodeToKeep.recordClass(pair.getType(graphLens));
+          desugaredLibraryCodeToKeep.recordClass(pair.getType(graphLens, codeLens));
         }
         if (hasCatchAll) {
           dest.putUleb128(handler.catchAllAddr);
diff --git a/src/main/java/com/android/tools/r8/dex/StartupMixedSectionLayoutStrategy.java b/src/main/java/com/android/tools/r8/dex/StartupMixedSectionLayoutStrategy.java
index b98df1c..1a2f918 100644
--- a/src/main/java/com/android/tools/r8/dex/StartupMixedSectionLayoutStrategy.java
+++ b/src/main/java/com/android/tools/r8/dex/StartupMixedSectionLayoutStrategy.java
@@ -22,6 +22,7 @@
 import com.android.tools.r8.graph.DexWritableCode;
 import com.android.tools.r8.graph.ParameterAnnotationsList;
 import com.android.tools.r8.graph.ProgramMethod;
+import com.android.tools.r8.graph.lens.GraphLens;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import com.android.tools.r8.profile.startup.profile.StartupProfile;
 import com.android.tools.r8.profile.startup.profile.StartupProfileClassRule;
@@ -124,7 +125,8 @@
       methodReference.collectIndexedItems(appView, indexedItemCollection);
       if (indexedItemCollection.addCode(method)) {
         DexWritableCode code = method.getDefinition().getCode().asDexWritableCode();
-        code.collectIndexedItems(appView, indexedItemCollection, method, rewriter);
+        GraphLens codeLens = code.getCodeLens(appView);
+        code.collectIndexedItems(appView, codeLens, indexedItemCollection, method, rewriter);
       }
     }
   }
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexCheckCast.java b/src/main/java/com/android/tools/r8/dex/code/DexCheckCast.java
index 224f94a..c0012cb 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexCheckCast.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexCheckCast.java
@@ -62,10 +62,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -77,7 +78,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = graphLens.lookupType(getType(), codeLens);
     writeFirst(AA, dest);
     write16BitReference(rewritten, dest, mapping);
   }
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstClass.java b/src/main/java/com/android/tools/r8/dex/code/DexConstClass.java
index b4a593e..0013063 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstClass.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstClass.java
@@ -62,10 +62,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -77,7 +78,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = graphLens.lookupType(getType(), codeLens);
     writeFirst(AA, dest);
     write16BitReference(rewritten, dest, mapping);
   }
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java
index 7aa77db..f9ee91b 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java
@@ -95,6 +95,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java
index 485b3da..bef8628 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java
@@ -91,6 +91,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstString.java b/src/main/java/com/android/tools/r8/dex/code/DexConstString.java
index b95b247..7ed956d 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstString.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstString.java
@@ -43,6 +43,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArray.java b/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArray.java
index 72fac38..d3815e8 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArray.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArray.java
@@ -46,10 +46,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -75,7 +76,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = graphLens.lookupType(getType(), codeLens);
     writeFirst(A, G, dest);
     write16BitReference(rewritten, dest, mapping);
     write16BitValue(combineBytes(makeByte(F, E), makeByte(D, C)), dest);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArrayRange.java b/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArrayRange.java
index 436ec57..d26b547 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArrayRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFilledNewArrayRange.java
@@ -46,10 +46,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -75,7 +76,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = graphLens.lookupType(getType(), codeLens);
     writeFirst(AA, dest);
     write16BitReference(rewritten, dest, mapping);
     write16BitValue(CCCC, dest);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java
index eaee763..1f1567c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java
@@ -69,6 +69,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java
index 3071bfa..bdfca29 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java
@@ -46,6 +46,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java
index 5796308..82c165e 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java
@@ -79,6 +79,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java
index ef59bfb..cedd4a9 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java
@@ -69,6 +69,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java
index 05a6b22..12d53d2 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java
@@ -77,6 +77,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java
index d398e0d..d4d90c5 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java
@@ -69,6 +69,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21h.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21h.java
index 5dfec30..144d491 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21h.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21h.java
@@ -68,6 +68,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java
index 8ccce8c..254efee 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java
@@ -80,6 +80,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
index 55eaac6..696b5bc 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
@@ -98,6 +98,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java
index d3bb2df..6334bc5 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java
@@ -85,6 +85,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java
index fc22957..f01a75b4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java
@@ -85,6 +85,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
index 00b22c1..bec44e3 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
@@ -102,6 +102,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java
index 0dedb95..1077ce0 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java
@@ -79,6 +79,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java
index bcadc94..fab119f 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java
@@ -83,6 +83,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java
index 18c9137..a65da4f 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java
@@ -68,6 +68,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java
index 695779e..9895905 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java
@@ -77,6 +77,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java
index d2eed2d..d0a2932 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java
@@ -73,6 +73,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java
index 2e7de21..28b16eb 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java
@@ -88,6 +88,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java
index dd6f6bf..fd8ae9d 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java
@@ -81,6 +81,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
index a8935b6..6506871 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
@@ -102,13 +102,14 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
         appView
             .graphLens()
-            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC);
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC, codeLens);
     assert lookup.getType() == InvokeType.POLYMORPHIC;
     lookup.getReference().collectIndexedItems(appView, indexedItems);
 
@@ -130,7 +131,7 @@
     assert rewriter.dexItemFactory().polymorphicMethods.isPolymorphicInvoke(getMethod());
     assert getMethod()
         == graphLens
-            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC)
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC, codeLens)
             .getReference();
     DexProto rewrittenProto = rewriter.rewriteProto(getProto());
     writeFirst(A, G, dest);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
index fcf77ed..0418db4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
@@ -66,7 +66,7 @@
     assert rewriter.dexItemFactory().polymorphicMethods.isPolymorphicInvoke(getMethod());
     assert getMethod()
         == graphLens
-            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC)
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC, codeLens)
             .getReference();
     DexProto rewrittenProto = rewriter.rewriteProto(getProto());
     writeFirst(AA, dest);
@@ -116,13 +116,14 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
         appView
             .graphLens()
-            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC);
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC, codeLens);
     assert lookup.getType() == InvokeType.POLYMORPHIC;
     lookup.getReference().collectIndexedItems(appView, indexedItems);
 
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java
index a135f5b..bf29e4b 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java
@@ -73,6 +73,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIgetOrIput.java b/src/main/java/com/android/tools/r8/dex/code/DexIgetOrIput.java
index 8edfdf6..26330f6 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIgetOrIput.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIgetOrIput.java
@@ -25,10 +25,11 @@
   @Override
   public final void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexField rewritten = appView.graphLens().lookupField(getField());
+    DexField rewritten = appView.graphLens().lookupField(getField(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java b/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java
index 76a3289..47a4392 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java
@@ -49,12 +49,13 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     // We intentionally apply the graph lens first, and then the init class lens, using the fact
     // that the init class lens maps classes in the final program to fields in the final program.
-    DexType rewrittenClass = appView.graphLens().lookupType(clazz);
+    DexType rewrittenClass = appView.graphLens().lookupType(clazz, codeLens);
     DexField clinitField = appView.initClassLens().getInitClassField(rewrittenClass);
     clinitField.collectIndexedItems(appView, indexedItems);
   }
@@ -123,7 +124,7 @@
       LensCodeRewriterUtils rewriter) {
     // We intentionally apply the graph lens first, and then the init class lens, using the fact
     // that the init class lens maps classes in the final program to fields in the final program.
-    DexType rewrittenClass = graphLens.lookupType(clazz);
+    DexType rewrittenClass = graphLens.lookupType(clazz, codeLens);
     DexField clinitField = mapping.getClinitField(rewrittenClass);
     writeFirst(dest, buffer, getOpcode(clinitField));
     write16BitReference(clinitField, buffer, mapping);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInstanceOf.java b/src/main/java/com/android/tools/r8/dex/code/DexInstanceOf.java
index a85b4a3..386a942 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInstanceOf.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInstanceOf.java
@@ -57,10 +57,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -91,7 +92,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType lookup = graphLens.lookupType(getType());
+    DexType lookup = graphLens.lookupType(getType(), codeLens);
     writeFirst(B, A, dest);
     write16BitReference(lookup, dest, mapping);
   }
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java b/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java
index 12fc104..545528a 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java
@@ -407,6 +407,7 @@
 
   public abstract void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustom.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustom.java
index 21dd606..27f54c4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustom.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustom.java
@@ -47,6 +47,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustomRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustomRange.java
index 3bc4796..93096bd 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustomRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeCustomRange.java
@@ -47,6 +47,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java
index 763b823..2a31f06 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java
@@ -27,13 +27,14 @@
   @Override
   public final void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     DexMethod rewritten =
         appView
             .graphLens()
-            .lookupMethod(getMethod(), context.getReference(), getInvokeType())
+            .lookupMethod(getMethod(), context.getReference(), getInvokeType(), codeLens)
             .getReference();
     rewritten.collectIndexedItems(appView, indexedItems);
   }
@@ -54,7 +55,7 @@
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
-        graphLens.lookupMethod(getMethod(), context.getReference(), getInvokeType());
+        graphLens.lookupMethod(getMethod(), context.getReference(), getInvokeType(), codeLens);
     writeFirst(A, G, dest, lookup.getType().getDexOpcode());
     write16BitReference(lookup.getReference(), dest, mapping);
     write16BitValue(combineBytes(makeByte(F, E), makeByte(D, C)), dest);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java
index 8809f06..9f53ea6 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java
@@ -27,13 +27,14 @@
   @Override
   public final void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     DexMethod rewritten =
         appView
             .graphLens()
-            .lookupMethod(getMethod(), context.getReference(), getInvokeType())
+            .lookupMethod(getMethod(), context.getReference(), getInvokeType(), codeLens)
             .getReference();
     rewritten.collectIndexedItems(appView, indexedItems);
   }
@@ -54,7 +55,7 @@
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
-        graphLens.lookupMethod(getMethod(), context.getReference(), getInvokeType());
+        graphLens.lookupMethod(getMethod(), context.getReference(), getInvokeType(), codeLens);
     writeFirst(AA, dest, lookup.getType().getDexOpcodeRange());
     write16BitReference(lookup.getReference(), dest, mapping);
     write16BitValue(CCCC, dest);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java b/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java
index d2adc25..88f47f8 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java
@@ -42,6 +42,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexNewArray.java b/src/main/java/com/android/tools/r8/dex/code/DexNewArray.java
index cad1490..e24cd52 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexNewArray.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexNewArray.java
@@ -47,10 +47,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -81,7 +82,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType lookup = graphLens.lookupType(getType());
+    DexType lookup = graphLens.lookupType(getType(), codeLens);
     writeFirst(B, A, dest);
     write16BitReference(lookup, dest, mapping);
   }
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexNewInstance.java b/src/main/java/com/android/tools/r8/dex/code/DexNewInstance.java
index 20067e5..f3885c6 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexNewInstance.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexNewInstance.java
@@ -53,10 +53,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = appView.graphLens().lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
@@ -68,7 +69,7 @@
       GraphLens codeLens,
       ObjectToOffsetMapping mapping,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = graphLens.lookupType(getType(), codeLens);
     writeFirst(AA, dest);
     write16BitReference(rewritten, dest, mapping);
   }
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexNewUnboxedEnumInstance.java b/src/main/java/com/android/tools/r8/dex/code/DexNewUnboxedEnumInstance.java
index 0ef15d8..0e02d63 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexNewUnboxedEnumInstance.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexNewUnboxedEnumInstance.java
@@ -53,6 +53,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java b/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java
index f7e4684..7fc116b 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java
@@ -40,6 +40,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexSgetOrSput.java b/src/main/java/com/android/tools/r8/dex/code/DexSgetOrSput.java
index 3fe34b47..9e0b6be 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexSgetOrSput.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexSgetOrSput.java
@@ -26,10 +26,11 @@
   @Override
   public final void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
-    DexField rewritten = appView.graphLens().lookupField(getField());
+    DexField rewritten = appView.graphLens().lookupField(getField(), codeLens);
     rewritten.collectIndexedItems(appView, indexedItems);
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 2974981..665a472 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -189,12 +189,13 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     DexMethod parentConstructor = getParentConstructor(context, rewriter.dexItemFactory());
     MethodLookupResult lookupResult =
-        appView.graphLens().lookupInvokeDirect(parentConstructor, context);
+        appView.graphLens().lookupInvokeDirect(parentConstructor, context, codeLens);
     lookupResult.getReference().collectIndexedItems(appView, indexedItems);
   }
 
@@ -398,8 +399,7 @@
       LensCodeRewriterUtils lensCodeRewriter,
       ObjectToOffsetMapping mapping) {
     DexMethod parentConstructor = getParentConstructor(context, mapping.dexItemFactory());
-    MethodLookupResult lookupResult = graphLens.lookupInvokeDirect(parentConstructor, context);
-    new DexInvokeDirect(1, lookupResult.getReference(), 0, 0, 0, 0, 0)
+    new DexInvokeDirect(1, parentConstructor, 0, 0, 0, 0, 0)
         .write(shortBuffer, context, graphLens, codeLens, mapping, lensCodeRewriter);
     new DexReturnVoid().write(shortBuffer, context, graphLens, codeLens, mapping, lensCodeRewriter);
   }
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 00febce..95d19ee 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -749,13 +749,14 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     highestSortingString = null;
     for (DexInstruction insn : instructions) {
       assert !insn.isDexItemBasedConstString();
-      insn.collectIndexedItems(appView, indexedItems, context, rewriter);
+      insn.collectIndexedItems(appView, codeLens, indexedItems, context, rewriter);
       if (insn.isConstString()) {
         updateHighestSortingString(insn.asConstString().getString());
       } else if (insn.isConstStringJumbo()) {
@@ -763,10 +764,10 @@
       }
     }
     if (debugInfo != null) {
-      getDebugInfoForWriting().collectIndexedItems(appView, indexedItems);
+      getDebugInfoForWriting().collectIndexedItems(appView, codeLens, indexedItems);
     }
     for (TryHandler handler : handlers) {
-      handler.collectIndexedItems(appView, indexedItems);
+      handler.collectIndexedItems(appView, codeLens, indexedItems);
     }
   }
 
@@ -996,9 +997,10 @@
       return Equatable.equalsImpl(this, other);
     }
 
-    public void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems) {
+    public void collectIndexedItems(
+        AppView<?> appView, GraphLens codeLens, IndexedItemCollection indexedItems) {
       for (TypeAddrPair pair : pairs) {
-        pair.collectIndexedItems(appView, indexedItems);
+        pair.collectIndexedItems(appView, codeLens, indexedItems);
       }
     }
 
@@ -1056,12 +1058,13 @@
         return type;
       }
 
-      public DexType getType(GraphLens lens) {
-        return lens.lookupType(type);
+      public DexType getType(GraphLens lens, GraphLens codeLens) {
+        return lens.lookupType(type, codeLens);
       }
 
-      public void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems) {
-        DexType rewritten = getType(appView.graphLens());
+      public void collectIndexedItems(
+          AppView<?> appView, GraphLens codeLens, IndexedItemCollection indexedItems) {
+        DexType rewritten = getType(appView.graphLens(), codeLens);
         rewritten.collectIndexedItems(appView, indexedItems);
       }
 
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 ac495b4..5b4d625 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
@@ -24,7 +24,8 @@
 
   public static final DexDebugEvent[] EMPTY_ARRAY = {};
 
-  public void collectIndexedItems(AppView<?> appView, IndexedItemCollection collection) {
+  public void collectIndexedItems(
+      AppView<?> appView, GraphLens codeLens, IndexedItemCollection collection) {
     // Empty by default.
   }
 
@@ -74,9 +75,12 @@
   }
 
   public final void writeOn(
-      DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+      DebugBytecodeWriter writer,
+      ObjectToOffsetMapping mapping,
+      GraphLens graphLens,
+      GraphLens codeLens) {
     assert isWritableEvent();
-    internalWriteOn(writer, mapping, graphLens);
+    internalWriteOn(writer, mapping, graphLens, codeLens);
   }
 
   boolean isWritableEvent() {
@@ -84,7 +88,10 @@
   }
 
   void internalWriteOn(
-      DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+      DebugBytecodeWriter writer,
+      ObjectToOffsetMapping mapping,
+      GraphLens graphLens,
+      GraphLens codeLens) {
     throw new Unreachable();
   }
 
@@ -125,7 +132,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(Constants.DBG_ADVANCE_PC);
       writer.putUleb128(delta);
     }
@@ -180,7 +190,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(Constants.DBG_SET_PROLOGUE_END);
     }
 
@@ -230,7 +243,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(Constants.DBG_SET_EPILOGUE_BEGIN);
     }
 
@@ -291,7 +307,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(Constants.DBG_ADVANCE_LINE);
       writer.putSleb128(delta);
     }
@@ -364,25 +383,29 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(signature == null
           ? Constants.DBG_START_LOCAL
           : Constants.DBG_START_LOCAL_EXTENDED);
       writer.putUleb128(registerNum);
       writer.putString(name);
-      writer.putType(graphLens.lookupType(type));
+      writer.putType(graphLens.lookupType(type, codeLens));
       if (signature != null) {
         writer.putString(signature);
       }
     }
 
     @Override
-    public void collectIndexedItems(AppView<?> appView, IndexedItemCollection collection) {
+    public void collectIndexedItems(
+        AppView<?> appView, GraphLens codeLens, IndexedItemCollection collection) {
       if (name != null) {
         name.collectIndexedItems(collection);
       }
       if (type != null) {
-        DexType rewritten = appView.graphLens().lookupType(type);
+        DexType rewritten = appView.graphLens().lookupType(type, codeLens);
         rewritten.collectIndexedItems(appView, collection);
       }
       if (signature != null) {
@@ -440,7 +463,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(Constants.DBG_END_LOCAL);
       writer.putUleb128(registerNum);
     }
@@ -492,7 +518,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(Constants.DBG_RESTART_LOCAL);
       writer.putUleb128(registerNum);
     }
@@ -551,7 +580,8 @@
     }
 
     @Override
-    public void collectIndexedItems(AppView<?> appView, IndexedItemCollection collection) {
+    public void collectIndexedItems(
+        AppView<?> appView, GraphLens codeLens, IndexedItemCollection collection) {
       fileName.collectIndexedItems(collection);
     }
 
@@ -682,7 +712,10 @@
 
     @Override
     public void internalWriteOn(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putByte(value);
     }
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java b/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java
index 3707fdf..24ee6d2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java
@@ -152,7 +152,8 @@
     }
 
     @Override
-    public void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems) {
+    public void collectIndexedItems(
+        AppView<?> appView, GraphLens codeLens, IndexedItemCollection indexedItems) {
       // No indexed items to collect.
     }
 
@@ -172,15 +173,21 @@
 
     @Override
     public void write(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putUleb128(START_LINE);
       writer.putUleb128(parameterCount);
       for (int i = 0; i < parameterCount; i++) {
         writer.putString(null);
       }
-      mapping.dexItemFactory().zeroChangeDefaultEvent.writeOn(writer, mapping, graphLens);
+      mapping.dexItemFactory().zeroChangeDefaultEvent.writeOn(writer, mapping, graphLens, codeLens);
       for (int i = 0; i < maxPc; i++) {
-        mapping.dexItemFactory().oneChangeDefaultEvent.writeOn(writer, mapping, graphLens);
+        mapping
+            .dexItemFactory()
+            .oneChangeDefaultEvent
+            .writeOn(writer, mapping, graphLens, codeLens);
       }
       writer.putByte(Constants.DBG_END_SEQUENCE);
     }
@@ -263,14 +270,15 @@
       return visitor.visit(this, other.asEventBasedInfo(), EventBasedDebugInfo::specify);
     }
 
-    public void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems) {
+    public void collectIndexedItems(
+        AppView<?> appView, GraphLens codeLens, IndexedItemCollection indexedItems) {
       for (DexString parameter : parameters) {
         if (parameter != null) {
           parameter.collectIndexedItems(indexedItems);
         }
       }
       for (DexDebugEvent event : events) {
-        event.collectIndexedItems(appView, indexedItems);
+        event.collectIndexedItems(appView, codeLens, indexedItems);
       }
     }
 
@@ -363,8 +371,9 @@
     }
 
     @Override
-    public void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems) {
-      super.collectIndexedItems(appView, indexedItems);
+    public void collectIndexedItems(
+        AppView<?> appView, GraphLens codeLens, IndexedItemCollection indexedItems) {
+      super.collectIndexedItems(appView, codeLens, indexedItems);
     }
 
     @Override
@@ -385,14 +394,17 @@
 
     @Override
     public void write(
-        DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
+        DebugBytecodeWriter writer,
+        ObjectToOffsetMapping mapping,
+        GraphLens graphLens,
+        GraphLens codeLens) {
       writer.putUleb128(startLine);
       writer.putUleb128(parameters.length);
       for (DexString name : parameters) {
         writer.putString(name);
       }
       for (DexDebugEvent event : events) {
-        event.writeOn(writer, mapping, graphLens);
+        event.writeOn(writer, mapping, graphLens, codeLens);
       }
       writer.putByte(Constants.DBG_END_SEQUENCE);
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugInfoForWriting.java b/src/main/java/com/android/tools/r8/graph/DexDebugInfoForWriting.java
index 67ab2aa..a01f2fb 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugInfoForWriting.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugInfoForWriting.java
@@ -14,9 +14,14 @@
 
   void collectMixedSectionItems(MixedSectionCollection collection);
 
-  void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems);
+  void collectIndexedItems(
+      AppView<?> appView, GraphLens codeLens, IndexedItemCollection indexedItems);
 
   int estimatedWriteSize();
 
-  void write(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens);
+  void write(
+      DebugBytecodeWriter writer,
+      ObjectToOffsetMapping mapping,
+      GraphLens graphLens,
+      GraphLens codeLens);
 }
diff --git a/src/main/java/com/android/tools/r8/graph/DexWritableCode.java b/src/main/java/com/android/tools/r8/graph/DexWritableCode.java
index afe2afb..7cc7830 100644
--- a/src/main/java/com/android/tools/r8/graph/DexWritableCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexWritableCode.java
@@ -56,6 +56,7 @@
 
   void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter);
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index 53e4ddc..9b4fa96 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -72,7 +72,8 @@
     getReference().collectIndexedItems(appView, indexedItems);
     if (definition.hasCode()) {
       Code code = definition.getCode();
-      code.asDexWritableCode().collectIndexedItems(appView, indexedItems, this, rewriter);
+      GraphLens codeLens = code.getCodeLens(appView);
+      code.asDexWritableCode().collectIndexedItems(appView, codeLens, indexedItems, this, rewriter);
     }
     definition.annotations().collectIndexedItems(appView, indexedItems);
     definition.parameterAnnotationsList.collectIndexedItems(appView, indexedItems);
diff --git a/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java b/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
index dc2bbdc..7e359ec 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
@@ -79,9 +79,11 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
+    assert exceptionType.isIdenticalTo(appView.graphLens().lookupType(exceptionType, codeLens));
     rewriter
         .dexItemFactory()
         .createInstanceInitializer(exceptionType)
diff --git a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
index ddfbba1..48fe289 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
@@ -100,6 +100,7 @@
   @Override
   public void collectIndexedItems(
       AppView<?> appView,
+      GraphLens codeLens,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {