Merge commit 'e554cce584ccf03601d97ce6d4f34230a3177f39' into dev-release
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 06f5379..43868c3 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -17,8 +17,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.LazyLoadedDexApplication;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.analysis.ClassInitializerAssertionEnablingAnalysis;
@@ -280,7 +278,7 @@
 
       if (options.isGeneratingClassFiles()) {
         finalizeApplication(appView, executor);
-        new CfApplicationWriter(appView, marker, GraphLens.getIdentityLens(), namingLens)
+        new CfApplicationWriter(appView, marker, namingLens)
             .write(options.getClassFileConsumer(), inputApp);
       } else {
         if (!hasDexResources || !hasClassResources || !appView.typeRewriter.isRewriting()) {
@@ -332,8 +330,6 @@
         new ApplicationWriter(
                 appView,
                 marker == null ? null : ImmutableList.copyOf(markers),
-                appView.graphLens(),
-                InitClassLens.getThrowingInstance(),
                 namingLens)
             .write(executor, inputApp);
       }
@@ -393,8 +389,6 @@
     new ApplicationWriter(
             appView,
             null,
-            GraphLens.getIdentityLens(),
-            InitClassLens.getThrowingInstance(),
             desugaringLens,
             convertedCfFiles)
         .write(executor);
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index d8e8e69..a31f3f7 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -13,8 +13,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.ExceptionUtils;
@@ -105,8 +103,6 @@
             new ApplicationWriter(
                 appView,
                 markers,
-                GraphLens.getIdentityLens(),
-                InitClassLens.getThrowingInstance(),
                 NamingLens.getIdentityLens());
         writer.write(executor);
         options.printWarnings();
diff --git a/src/main/java/com/android/tools/r8/DexSplitterHelper.java b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
index fdcdaf2..a7ac9e3 100644
--- a/src/main/java/com/android/tools/r8/DexSplitterHelper.java
+++ b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
@@ -14,8 +14,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.LazyLoadedDexApplication;
 import com.android.tools.r8.naming.ClassNameMapper;
 import com.android.tools.r8.naming.NamingLens;
@@ -112,8 +110,6 @@
           new ApplicationWriter(
                   appView,
                   markers,
-                  GraphLens.getIdentityLens(),
-                  InitClassLens.getThrowingInstance(),
                   NamingLens.getIdentityLens(),
                   consumer)
               .write(executor);
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index dde847a..303b540 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -30,7 +30,6 @@
 import com.android.tools.r8.graph.FieldAccessFlags;
 import com.android.tools.r8.graph.GenericSignature.ClassSignature;
 import com.android.tools.r8.graph.GenericSignature.MethodTypeSignature;
-import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.LazyLoadedDexApplication;
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.MethodCollection.MethodCollectionFactory;
@@ -349,7 +348,6 @@
         new CfApplicationWriter(
             appView,
             options.getMarker(Tool.L8),
-            GraphLens.getIdentityLens(),
             NamingLens.getIdentityLens());
     ClassFileConsumer consumer =
         new ClassFileConsumer.ArchiveConsumer(
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index 430d811..48e8729 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -146,7 +146,7 @@
       NamingLens namingLens = PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView);
       new GenericSignatureRewriter(appView, namingLens).run(appView.appInfo().classes(), executor);
 
-      new CfApplicationWriter(appView, options.getMarker(Tool.L8), appView.graphLens(), namingLens)
+      new CfApplicationWriter(appView, options.getMarker(Tool.L8), namingLens)
           .write(options.getClassFileConsumer());
       options.printWarnings();
     } catch (ExecutionException e) {
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 7d177cd..885ada8 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -36,7 +36,6 @@
 import com.android.tools.r8.graph.GenericSignatureContextBuilder;
 import com.android.tools.r8.graph.GenericSignatureCorrectnessHelper;
 import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.ProgramDefinition;
 import com.android.tools.r8.graph.PrunedItems;
 import com.android.tools.r8.graph.SubtypingInfo;
@@ -212,8 +211,6 @@
   static void writeApplication(
       ExecutorService executorService,
       AppView<?> appView,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens,
       InternalOptions options,
       AndroidApp inputApp)
@@ -227,15 +224,13 @@
       Set<Marker> markers = new HashSet<>(options.itemFactory.extractMarkers());
       markers.remove(marker);
       if (options.isGeneratingClassFiles()) {
-        new CfApplicationWriter(appView, marker, graphLens, namingLens)
+        new CfApplicationWriter(appView, marker, namingLens)
             .write(options.getClassFileConsumer(), inputApp);
       } else {
         new ApplicationWriter(
                 appView,
                 // Ensure that the marker for this compilation is the first in the list.
                 ImmutableList.<Marker>builder().add(marker).addAll(markers).build(),
-                graphLens,
-                initClassLens,
                 namingLens)
             .write(executorService, inputApp);
       }
@@ -844,8 +839,6 @@
       writeApplication(
           executorService,
           appView,
-          appView.graphLens(),
-          appView.initClassLens(),
           namingLens,
           options,
           inputApp);
diff --git a/src/main/java/com/android/tools/r8/bisect/Bisect.java b/src/main/java/com/android/tools/r8/bisect/Bisect.java
index 262300f..d9dd999 100644
--- a/src/main/java/com/android/tools/r8/bisect/Bisect.java
+++ b/src/main/java/com/android/tools/r8/bisect/Bisect.java
@@ -14,8 +14,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.AndroidAppConsumers;
@@ -192,8 +190,6 @@
         new ApplicationWriter(
             AppView.createForD8(AppInfo.createInitialAppInfo(app)),
             null,
-            GraphLens.getIdentityLens(),
-            InitClassLens.getThrowingInstance(),
             NamingLens.getIdentityLens());
     writer.write(executor);
     options.signalFinishedToConsumers();
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 58748cd..3bb7190 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -39,8 +39,6 @@
 import com.android.tools.r8.graph.DexValue;
 import com.android.tools.r8.graph.DexWritableCode;
 import com.android.tools.r8.graph.EnclosingMethodAttribute;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.InnerClassAttribute;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ParameterAnnotationsList;
@@ -81,8 +79,6 @@
 public class ApplicationWriter {
 
   public final AppView<?> appView;
-  public final GraphLens graphLens;
-  public final InitClassLens initClassLens;
   public final NamingLens namingLens;
   public final InternalOptions options;
   private final CodeToKeep desugaredLibraryCodeToKeep;
@@ -158,14 +154,10 @@
   public ApplicationWriter(
       AppView<?> appView,
       List<Marker> markers,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens) {
     this(
         appView,
         markers,
-        graphLens,
-        initClassLens,
         namingLens,
         null);
   }
@@ -173,16 +165,12 @@
   public ApplicationWriter(
       AppView<?> appView,
       List<Marker> markers,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens,
       DexIndexedConsumer consumer) {
     this.appView = appView;
     this.options = appView.options();
     this.desugaredLibraryCodeToKeep = CodeToKeep.createCodeToKeep(options, namingLens);
     this.markers = markers;
-    this.graphLens = graphLens;
-    this.initClassLens = initClassLens;
     this.namingLens = namingLens;
     this.programConsumer = consumer;
     this.isTypeMissing =
@@ -297,7 +285,8 @@
                   Timing fileTiming = Timing.create("VirtualFile " + virtualFile.getId(), options);
                   computeOffsetMappingAndRewriteJumboStrings(
                       virtualFile, lazyDexStrings, fileTiming);
-                  DebugRepresentation.computeForFile(virtualFile, graphLens, namingLens, options);
+                  DebugRepresentation.computeForFile(
+                      virtualFile, appView.graphLens(), namingLens, options);
                   fileTiming.end();
                   return fileTiming;
                 },
@@ -351,7 +340,7 @@
       // Fail if there are pending errors, e.g., the program consumers may have reported errors.
       options.reporter.failIfPendingErrors();
       // Supply info to all additional resource consumers.
-      supplyAdditionalConsumers(appView.appInfo().app(), appView, graphLens, namingLens, options);
+      supplyAdditionalConsumers(appView.appInfo().app(), appView, namingLens, options);
     } finally {
       timing.end();
     }
@@ -455,8 +444,7 @@
       return;
     }
     timing.begin("Compute object offset mapping");
-    virtualFile.computeMapping(
-        appView, graphLens, namingLens, initClassLens, lazyDexStrings.size(), timing);
+    virtualFile.computeMapping(appView, namingLens, lazyDexStrings.size(), timing);
     timing.end();
     timing.begin("Rewrite jumbo strings");
     rewriteCodeWithJumboStrings(
@@ -521,7 +509,6 @@
   public static void supplyAdditionalConsumers(
       DexApplication application,
       AppView<?> appView,
-      GraphLens graphLens,
       NamingLens namingLens,
       InternalOptions options) {
     if (options.configurationConsumer != null) {
@@ -540,7 +527,7 @@
     if (dataResourceConsumer != null) {
       ImmutableList<DataResourceProvider> dataResourceProviders = application.dataResourceProviders;
       ResourceAdapter resourceAdapter =
-          new ResourceAdapter(appView, application.dexItemFactory, graphLens, namingLens, options);
+          new ResourceAdapter(appView, application.dexItemFactory, namingLens, options);
 
       adaptAndPassDataResources(
           options, dataResourceConsumer, dataResourceProviders, resourceAdapter);
@@ -575,8 +562,7 @@
       for (DataResourceProvidersAndConsumer entry :
           options.featureSplitConfiguration.getDataResourceProvidersAndConsumers()) {
         ResourceAdapter resourceAdapter =
-            new ResourceAdapter(
-                appView, application.dexItemFactory, graphLens, namingLens, options);
+            new ResourceAdapter(appView, application.dexItemFactory, namingLens, options);
         adaptAndPassDataResources(
             options, entry.getConsumer(), entry.getProviders(), resourceAdapter);
       }
diff --git a/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java b/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
index 1183590..92671f2 100644
--- a/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
+++ b/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
@@ -10,8 +10,6 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.collect.Maps;
@@ -71,7 +69,7 @@
 
     public void updateNumbersOfIds() {
       // Use a temporary VirtualFile to evaluate the number of ids in the group.
-      VirtualFile virtualFile = new VirtualFile(0, appView, graphLens, initClassLens, namingLens);
+      VirtualFile virtualFile = new VirtualFile(0, appView, namingLens);
       // Note: sort not needed.
       for (DexProgramClass clazz : members) {
         virtualFile.addClass(clazz);
@@ -285,9 +283,7 @@
   private final BitSet fullDex = new BitSet();
   private final Set<DexProgramClass> classes;
   private final AppView<?> appView;
-  private int dexIndexOffset;
-  private final GraphLens graphLens;
-  private final InitClassLens initClassLens;
+  private final int dexIndexOffset;
   private final NamingLens namingLens;
   private final DirectSubClassesInfo directSubClasses;
 
@@ -296,8 +292,6 @@
       List<VirtualFile> dexes,
       Set<DexProgramClass> classes,
       int dexIndexOffset,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens,
       AppView<?> appView,
       ExecutorService executorService) {
@@ -305,8 +299,6 @@
     this.dexes = dexes;
     this.classes = classes;
     this.dexIndexOffset = dexIndexOffset;
-    this.graphLens = graphLens;
-    this.initClassLens = initClassLens;
     this.namingLens = namingLens;
     this.appView = appView;
     this.executorService = executorService;
@@ -378,8 +370,7 @@
   }
 
   private Collection<VirtualFile> assignGroup(ClassGroup group, List<VirtualFile> exclude) {
-    VirtualFileCycler cycler =
-        new VirtualFileCycler(dexes, appView, graphLens, initClassLens, namingLens, dexIndexOffset);
+    VirtualFileCycler cycler = new VirtualFileCycler(dexes, appView, namingLens, dexIndexOffset);
     if (group.members.isEmpty()) {
       return Collections.emptyList();
     } else if (group.canFitInOneDex()) {
@@ -428,8 +419,7 @@
     Collections.sort(layers);
 
     Collection<VirtualFile> usedDex = new ArrayList<>();
-    VirtualFileCycler cycler =
-        new VirtualFileCycler(dexes, appView, graphLens, initClassLens, namingLens, dexIndexOffset);
+    VirtualFileCycler cycler = new VirtualFileCycler(dexes, appView, namingLens, dexIndexOffset);
     // Don't modify exclude. Think about modifying the input collection considering this
     // is private API.
     Set<VirtualFile> currentExclude = new HashSet<>(exclude);
diff --git a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
index 29987e7..eaf736d 100644
--- a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
+++ b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
@@ -40,12 +40,11 @@
   public ResourceAdapter(
       AppView<?> appView,
       DexItemFactory dexItemFactory,
-      GraphLens graphLens,
       NamingLens namingLens,
       InternalOptions options) {
     this.appView = appView;
     this.dexItemFactory = dexItemFactory;
-    this.graphLens = graphLens;
+    this.graphLens = appView.graphLens();
     this.namingLens = namingLens;
     this.options = options;
   }
diff --git a/src/main/java/com/android/tools/r8/dex/VirtualFile.java b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
index a085223..7d88ac7 100644
--- a/src/main/java/com/android/tools/r8/dex/VirtualFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
@@ -79,44 +79,35 @@
   VirtualFile(
       int id,
       AppView<?> appView,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens) {
-    this(id, appView, graphLens, initClassLens, namingLens, null, null);
+    this(id, appView, namingLens, null, null);
   }
 
   VirtualFile(
       int id,
       AppView<?> appView,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens,
       FeatureSplit featureSplit) {
-    this(id, appView, graphLens, initClassLens, namingLens, null, featureSplit);
+    this(id, appView, namingLens, null, featureSplit);
   }
 
   private VirtualFile(
       int id,
       AppView<?> appView,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens,
       DexProgramClass primaryClass) {
-    this(id, appView, graphLens, initClassLens, namingLens, primaryClass, null);
+    this(id, appView, namingLens, primaryClass, null);
   }
 
   private VirtualFile(
       int id,
       AppView<?> appView,
-      GraphLens graphLens,
-      InitClassLens initClassLens,
       NamingLens namingLens,
       DexProgramClass primaryClass,
       FeatureSplit featureSplit) {
     this.id = id;
-    this.indexedItems = new VirtualFileIndexedItemCollection(graphLens, initClassLens, namingLens);
-    this.transaction =
-        new IndexedItemTransaction(indexedItems, appView, graphLens, initClassLens, namingLens);
+    this.indexedItems = new VirtualFileIndexedItemCollection(appView, namingLens);
+    this.transaction = new IndexedItemTransaction(indexedItems, appView, namingLens);
     this.primaryClass = primaryClass;
     this.featureSplit = featureSplit;
   }
@@ -221,9 +212,7 @@
 
   public void computeMapping(
       AppView<?> appView,
-      GraphLens graphLens,
       NamingLens namingLens,
-      InitClassLens initClassLens,
       int lazyDexStringsCount,
       Timing timing) {
     assert transaction.isEmpty();
@@ -231,9 +220,7 @@
     objectMapping =
         new ObjectToOffsetMapping(
             appView,
-            graphLens,
             namingLens,
-            initClassLens,
             transaction.rewriter,
             indexedItems.classes,
             indexedItems.protos,
@@ -351,8 +338,6 @@
               new VirtualFile(
                   virtualFiles.size(),
                   writer.appView,
-                  writer.graphLens,
-                  writer.initClassLens,
                   writer.namingLens,
                   clazz);
           virtualFiles.add(file);
@@ -390,9 +375,7 @@
       this.options = options;
 
       // Create the primary dex file. The distribution will add more if needed.
-      mainDexFile =
-          new VirtualFile(
-              0, writer.appView, writer.graphLens, writer.initClassLens, writer.namingLens);
+      mainDexFile = new VirtualFile(0, writer.appView, writer.namingLens);
       assert virtualFiles.isEmpty();
       virtualFiles.add(mainDexFile);
       addMarkers(mainDexFile);
@@ -506,8 +489,6 @@
             new VirtualFile(
                 0,
                 writer.appView,
-                writer.graphLens,
-                writer.initClassLens,
                 writer.namingLens,
                 featureSplitSetEntry.getKey());
         virtualFiles.add(featureFile);
@@ -522,8 +503,6 @@
                 featureClasses,
                 originalNames,
                 0,
-                writer.graphLens,
-                writer.initClassLens,
                 writer.namingLens,
                 options)
             .call();
@@ -557,9 +536,7 @@
         assert !virtualFiles.get(0).isEmpty();
         assert virtualFiles.size() == 1;
         // The main dex file is filtered out, so ensure at least one file for the remaining classes.
-        virtualFiles.add(
-            new VirtualFile(
-                1, writer.appView, writer.graphLens, writer.initClassLens, writer.namingLens));
+        virtualFiles.add(new VirtualFile(1, writer.appView, writer.namingLens));
         filesForDistribution = virtualFiles.subList(1, virtualFiles.size());
         fileIndexOffset = 1;
       }
@@ -573,8 +550,6 @@
                 filesForDistribution,
                 classes,
                 fileIndexOffset,
-                writer.graphLens,
-                writer.initClassLens,
                 writer.namingLens,
                 writer.appView,
                 executorService)
@@ -589,8 +564,6 @@
                 classes,
                 originalNames,
                 fileIndexOffset,
-                writer.graphLens,
-                writer.initClassLens,
                 writer.namingLens,
                 options)
             .call();
@@ -642,10 +615,9 @@
     private final Set<DexCallSite> callSites = Sets.newIdentityHashSet();
     private final Set<DexMethodHandle> methodHandles = Sets.newIdentityHashSet();
 
-    public VirtualFileIndexedItemCollection(
-        GraphLens graphLens, InitClassLens initClassLens, NamingLens namingLens) {
-      this.graphLens = graphLens;
-      this.initClassLens = initClassLens;
+    public VirtualFileIndexedItemCollection(AppView<?> appView, NamingLens namingLens) {
+      this.graphLens = appView.graphLens();
+      this.initClassLens = appView.initClassLens();
       this.namingLens = namingLens;
     }
 
@@ -732,8 +704,8 @@
 
   public static class IndexedItemTransaction implements IndexedItemCollection {
 
+    private final AppView<?> appView;
     private final VirtualFileIndexedItemCollection base;
-    private final GraphLens graphLens;
     private final InitClassLens initClassLens;
     private final NamingLens namingLens;
     private final LensCodeRewriterUtils rewriter;
@@ -750,12 +722,10 @@
     private IndexedItemTransaction(
         VirtualFileIndexedItemCollection base,
         AppView<?> appView,
-        GraphLens graphLens,
-        InitClassLens initClassLens,
         NamingLens namingLens) {
+      this.appView = appView;
       this.base = base;
-      this.graphLens = graphLens;
-      this.initClassLens = initClassLens;
+      this.initClassLens = appView.initClassLens();
       this.namingLens = namingLens;
       this.rewriter = new LensCodeRewriterUtils(appView, true);
     }
@@ -769,7 +739,7 @@
     }
 
     void addClassAndDependencies(DexProgramClass clazz) {
-      clazz.collectIndexedItems(this, graphLens, rewriter);
+      clazz.collectIndexedItems(this, getGraphLens(), rewriter);
     }
 
     @Override
@@ -815,7 +785,7 @@
 
     @Override
     public GraphLens getGraphLens() {
-      return graphLens;
+      return appView.graphLens();
     }
 
     @Override
@@ -901,8 +871,6 @@
 
     private final List<VirtualFile> files;
     private final AppView<?> appView;
-    private final GraphLens graphLens;
-    private final InitClassLens initClassLens;
     private final NamingLens namingLens;
 
     private int nextFileId;
@@ -913,14 +881,10 @@
     VirtualFileCycler(
         List<VirtualFile> files,
         AppView<?> appView,
-        GraphLens graphLens,
-        InitClassLens initClassLens,
         NamingLens namingLens,
         int fileIndexOffset) {
       this.files = files;
       this.appView = appView;
-      this.graphLens = graphLens;
-      this.initClassLens = initClassLens;
       this.namingLens = namingLens;
 
       nextFileId = files.size() + fileIndexOffset;
@@ -951,9 +915,7 @@
       if (hasNext()) {
         return activeFiles.next();
       } else {
-        VirtualFile newFile =
-            new VirtualFile(
-                nextFileId++, appView, graphLens, initClassLens, namingLens, featuresplit);
+        VirtualFile newFile = new VirtualFile(nextFileId++, appView, namingLens, featuresplit);
         files.add(newFile);
         allFilesCyclic = Iterators.cycle(files);
         return newFile;
@@ -984,9 +946,7 @@
     }
 
     VirtualFile addFile() {
-      VirtualFile newFile =
-          new VirtualFile(
-              nextFileId++, appView, graphLens, initClassLens, namingLens, featuresplit);
+      VirtualFile newFile = new VirtualFile(nextFileId++, appView, namingLens, featuresplit);
       files.add(newFile);
 
       reset();
@@ -1030,17 +990,13 @@
         Set<DexProgramClass> classes,
         Map<DexProgramClass, String> originalNames,
         int fileIndexOffset,
-        GraphLens graphLens,
-        InitClassLens initClassLens,
         NamingLens namingLens,
         InternalOptions options) {
       this.classes = new ArrayList<>(classes);
       this.originalNames = originalNames;
       this.dexItemFactory = appView.dexItemFactory();
       this.options = options;
-      this.cycler =
-          new VirtualFileCycler(
-              files, appView, graphLens, initClassLens, namingLens, fileIndexOffset);
+      this.cycler = new VirtualFileCycler(files, appView, namingLens, fileIndexOffset);
     }
 
     static boolean coveredByPrefix(String originalName, String currentPrefix) {
diff --git a/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java b/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
index fcdafdd..3d987c1 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
@@ -54,9 +54,7 @@
 
   public ObjectToOffsetMapping(
       AppView<?> appView,
-      GraphLens graphLens,
       NamingLens namingLens,
-      InitClassLens initClassLens,
       LensCodeRewriterUtils lensCodeRewriter,
       Collection<DexProgramClass> classes,
       Collection<DexProto> protos,
@@ -69,7 +67,6 @@
       int lazyDexStringsCount,
       Timing timing) {
     assert appView != null;
-    assert graphLens != null;
     assert classes != null;
     assert protos != null;
     assert types != null;
@@ -78,12 +75,11 @@
     assert strings != null;
     assert callSites != null;
     assert methodHandles != null;
-    assert initClassLens != null;
     this.lazyDexStringsCount = lazyDexStringsCount;
     this.appView = appView;
-    this.graphLens = graphLens;
+    this.graphLens = appView.graphLens();
     this.namingLens = namingLens;
-    this.initClassLens = initClassLens;
+    this.initClassLens = appView.initClassLens();
     this.lensCodeRewriter = lensCodeRewriter;
     timing.begin("Sort strings");
     this.strings =
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 3d91587..27298a9 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -23,6 +23,7 @@
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.DexValue.DexValueNull;
 import com.android.tools.r8.graph.FieldAccessFlags;
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.MethodResolutionResult;
@@ -33,11 +34,14 @@
 import com.android.tools.r8.ir.desugar.lambda.ForcefullyMovedLambdaMethodConsumer;
 import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring;
 import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring.DesugarInvoke;
+import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
+import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
 import com.android.tools.r8.synthesis.SyntheticProgramClassBuilder;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.function.Consumer;
+import org.objectweb.asm.Opcodes;
 
 /**
  * Represents lambda class generated for a lambda descriptor in context of lambda instantiation
@@ -60,11 +64,15 @@
   public static final String JAVAC_EXPECTED_LAMBDA_METHOD_PREFIX = "lambda$";
   public static final String R8_LAMBDA_ACCESSOR_METHOD_PREFIX = "$r8$lambda$";
 
+  private static final OptimizationFeedback feedback = OptimizationFeedbackSimple.getInstance();
+
   final AppView<?> appView;
   final LambdaInstructionDesugaring desugaring;
   public final DexType type;
   public LambdaDescriptor descriptor;
   public final DexMethod constructor;
+  final DexMethod classConstructor;
+  public final DexField lambdaField;
   public final Target target;
 
   // Considered final but is set after due to circularity in allocation.
@@ -91,6 +99,16 @@
 
     this.target = createTarget(accessedFrom);
 
+    boolean statelessSingleton = isStatelessSingleton();
+    this.classConstructor =
+        statelessSingleton
+            ? factory.createMethod(type, constructorProto, factory.classConstructorMethodName)
+            : null;
+    this.lambdaField =
+        statelessSingleton
+            ? factory.createField(type, type, factory.lambdaInstanceFieldName)
+            : null;
+
     // Synthesize the program class once all fields are set.
     synthesizeLambdaClass(builder, desugarInvoke);
   }
@@ -114,12 +132,13 @@
   private void synthesizeLambdaClass(
       SyntheticProgramClassBuilder builder, DesugarInvoke desugarInvoke) {
     builder.setInterfaces(descriptor.interfaces);
+    synthesizeStaticFields(builder);
     synthesizeInstanceFields(builder);
     synthesizeDirectMethods(builder);
     synthesizeVirtualMethods(builder, desugarInvoke);
   }
 
-  DexField getCaptureField(int index) {
+  final DexField getCaptureField(int index) {
     return appView
         .dexItemFactory()
         .createField(
@@ -128,6 +147,10 @@
             appView.dexItemFactory().createString("f$" + index));
   }
 
+  public final boolean isStatelessSingleton() {
+    return appView.options().createSingletonsForStatelessLambdas && descriptor.isStateless();
+  }
+
   // Synthesize virtual methods.
   private void synthesizeVirtualMethods(
       SyntheticProgramClassBuilder builder, DesugarInvoke desugarInvoke) {
@@ -172,19 +195,39 @@
 
   // Synthesize direct methods.
   private void synthesizeDirectMethods(SyntheticProgramClassBuilder builder) {
+    boolean statelessSingleton = isStatelessSingleton();
+    List<DexEncodedMethod> methods = new ArrayList<>(statelessSingleton ? 2 : 1);
+
     // Constructor.
     MethodAccessFlags accessFlags =
         MethodAccessFlags.fromSharedAccessFlags(
-            Constants.ACC_PUBLIC | Constants.ACC_SYNTHETIC, true);
-    DexEncodedMethod method =
+            (statelessSingleton ? Constants.ACC_PRIVATE : Constants.ACC_PUBLIC)
+                | Constants.ACC_SYNTHETIC,
+            true);
+    methods.add(
         DexEncodedMethod.syntheticBuilder()
             .setMethod(constructor)
             .setAccessFlags(accessFlags)
             .setCode(LambdaConstructorSourceCode.build(this))
             // The api level is computed when tracing.
             .disableAndroidApiLevelCheck()
-            .build();
-    builder.setDirectMethods(Collections.singletonList(method));
+            .build());
+
+    // Class constructor for stateless lambda classes.
+    if (statelessSingleton) {
+      methods.add(
+          DexEncodedMethod.syntheticBuilder()
+              .setMethod(classConstructor)
+              .setAccessFlags(
+                  MethodAccessFlags.fromSharedAccessFlags(
+                      Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true))
+              .setCode(LambdaClassConstructorSourceCode.build(this))
+              // The api level is computed when tracing.
+              .disableAndroidApiLevelCheck()
+              .build());
+      feedback.classInitializerMayBePostponed(methods.get(1));
+    }
+    builder.setDirectMethods(methods);
   }
 
   // Synthesize instance fields to represent captured values.
@@ -207,6 +250,43 @@
     builder.setInstanceFields(fields);
   }
 
+  // Synthesize static fields to represent singleton instance.
+  private void synthesizeStaticFields(SyntheticProgramClassBuilder builder) {
+    if (isStatelessSingleton()) {
+      // Create instance field for stateless lambda.
+      assert this.lambdaField != null;
+      builder.setStaticFields(
+          Collections.singletonList(
+              DexEncodedField.syntheticBuilder()
+                  .setField(this.lambdaField)
+                  .setAccessFlags(
+                      FieldAccessFlags.fromSharedAccessFlags(
+                          Constants.ACC_PUBLIC
+                              | Constants.ACC_FINAL
+                              | Constants.ACC_SYNTHETIC
+                              | Constants.ACC_STATIC))
+                  .setStaticValue(DexValueNull.NULL)
+                  // The api level is computed when tracing.
+                  .disableAndroidApiLevelCheck()
+                  .build()));
+    }
+  }
+
+  public static int getAsmOpcodeForInvokeType(MethodHandleType type) {
+    switch (type) {
+      case INVOKE_INTERFACE:
+        return Opcodes.INVOKEINTERFACE;
+      case INVOKE_STATIC:
+        return Opcodes.INVOKESTATIC;
+      case INVOKE_DIRECT:
+        return Opcodes.INVOKESPECIAL;
+      case INVOKE_INSTANCE:
+        return Opcodes.INVOKEVIRTUAL;
+      default:
+        throw new Unreachable("Unexpected method handle type: " + type);
+    }
+  }
+
   // Creates a delegation target for this particular lambda class. Note that we
   // should always be able to create targets for the lambdas we support.
   private Target createTarget(ProgramMethod accessedFrom) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
new file mode 100644
index 0000000..ddcb68d
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
@@ -0,0 +1,35 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.desugar;
+
+import com.android.tools.r8.cf.code.CfInvoke;
+import com.android.tools.r8.cf.code.CfNew;
+import com.android.tools.r8.cf.code.CfReturnVoid;
+import com.android.tools.r8.cf.code.CfStackInstruction;
+import com.android.tools.r8.cf.code.CfStackInstruction.Opcode;
+import com.android.tools.r8.cf.code.CfStaticFieldWrite;
+import com.android.tools.r8.graph.CfCode;
+import com.google.common.collect.ImmutableList;
+import org.objectweb.asm.Opcodes;
+
+// Source code representing synthesized lambda class constructor.
+// Used for stateless lambdas to instantiate singleton instance.
+final class LambdaClassConstructorSourceCode {
+
+  public static CfCode build(LambdaClass lambda) {
+    int maxStack = 2;
+    int maxLocals = 0;
+    return new CfCode(
+        lambda.type,
+        maxStack,
+        maxLocals,
+        ImmutableList.of(
+            new CfNew(lambda.type),
+            new CfStackInstruction(Opcode.Dup),
+            new CfInvoke(Opcodes.INVOKESPECIAL, lambda.constructor, false),
+            new CfStaticFieldWrite(lambda.lambdaField, lambda.lambdaField),
+            new CfReturnVoid()));
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
index e72af99..bc7a544 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
@@ -190,6 +190,15 @@
     }
   }
 
+  public Iterable<DexType> getReferencedBaseTypes(DexItemFactory dexItemFactory) {
+    return enforcedProto.getBaseTypes(dexItemFactory);
+  }
+
+  /** Is a stateless lambda, i.e. lambda does not capture any values */
+  final boolean isStateless() {
+    return captures.isEmpty();
+  }
+
   /** Checks if call site needs a accessor when referenced from `accessedFrom`. */
   boolean needsAccessor(ProgramMethod accessedFrom) {
     if (implHandle.type.isInvokeInterface()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
index e305984..f7e8d1a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.cf.code.CfNew;
 import com.android.tools.r8.cf.code.CfStackInstruction;
 import com.android.tools.r8.cf.code.CfStackInstruction.Opcode;
+import com.android.tools.r8.cf.code.CfStaticFieldRead;
 import com.android.tools.r8.cf.code.CfStore;
 import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
 import com.android.tools.r8.graph.AppView;
@@ -31,6 +32,7 @@
 import com.android.tools.r8.ir.desugar.LocalStackAllocator;
 import com.android.tools.r8.synthesis.SyntheticNaming;
 import com.android.tools.r8.utils.Box;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import java.util.ArrayDeque;
 import java.util.Collection;
@@ -119,6 +121,11 @@
 
     eventConsumer.acceptLambdaClass(lambdaClass, context);
 
+    if (lambdaClass.isStatelessSingleton()) {
+      return ImmutableList.of(
+          new CfStaticFieldRead(lambdaClass.lambdaField, lambdaClass.lambdaField));
+    }
+
     DexTypeList captureTypes = lambdaClass.descriptor.captures;
     Deque<CfInstruction> replacement = new ArrayDeque<>(3 + captureTypes.size() * 2);
     replacement.add(new CfNew(lambdaClass.getType()));
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 98057dd..1332bf7 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -35,7 +35,6 @@
 import com.android.tools.r8.graph.DexValue.DexValueArray;
 import com.android.tools.r8.graph.DexValue.DexValueInt;
 import com.android.tools.r8.graph.DexValue.DexValueString;
-import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.InnerClassAttribute;
 import com.android.tools.r8.graph.NestMemberClassAttribute;
 import com.android.tools.r8.graph.ParameterAnnotationsList;
@@ -87,7 +86,6 @@
 
   private final DexApplication application;
   private final AppView<?> appView;
-  private final GraphLens graphLens;
   private final NamingLens namingLens;
   private final InternalOptions options;
   private final Marker marker;
@@ -95,11 +93,9 @@
 
   private static final CfVersion MIN_VERSION_FOR_COMPILER_GENERATED_CODE = CfVersion.V1_6;
 
-  public CfApplicationWriter(
-      AppView<?> appView, Marker marker, GraphLens graphLens, NamingLens namingLens) {
+  public CfApplicationWriter(AppView<?> appView, Marker marker, NamingLens namingLens) {
     this.application = appView.appInfo().app();
     this.appView = appView;
-    this.graphLens = graphLens;
     this.namingLens = namingLens;
     this.options = appView.options();
     assert marker != null;
@@ -180,8 +176,7 @@
                     e.getCodeSize()));
       }
     }
-    ApplicationWriter.supplyAdditionalConsumers(
-        application, appView, graphLens, namingLens, options);
+    ApplicationWriter.supplyAdditionalConsumers(application, appView, namingLens, options);
   }
 
   private void writeClass(
diff --git a/src/main/java/com/android/tools/r8/relocator/Relocator.java b/src/main/java/com/android/tools/r8/relocator/Relocator.java
index d0836d7..cd3adfe 100644
--- a/src/main/java/com/android/tools/r8/relocator/Relocator.java
+++ b/src/main/java/com/android/tools/r8/relocator/Relocator.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.graph.AppServices;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.jar.CfApplicationWriter;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
@@ -88,8 +87,7 @@
 
       new GenericSignatureRewriter(appView, namingLens).run(appInfo.classes(), executor);
 
-      new CfApplicationWriter(
-              appView, new Marker(Tool.Relocator), GraphLens.getIdentityLens(), namingLens)
+      new CfApplicationWriter(appView, new Marker(Tool.Relocator), namingLens)
           .write(command.getConsumer());
       options.printWarnings();
     } catch (ExecutionException e) {
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 12e0a78..e359381 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -360,6 +360,11 @@
   // Boolean value indicating that byte code pass through may be enabled.
   public boolean enableCfByteCodePassThrough = false;
 
+  // Flag to control the representation of stateless lambdas.
+  // See b/222081665 for context.
+  public boolean createSingletonsForStatelessLambdas =
+      System.getProperty("com.android.tools.r8.createSingletonsForStatelessLambdas") != null;
+
   // Contain the contents of the build properties file from the compiler command.
   public DumpOptions dumpOptions;
 
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 548279c..e0bb322 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -23,8 +23,6 @@
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DirectMappedDexApplication;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
@@ -2256,13 +2254,11 @@
     R8.writeApplication(
         Executors.newSingleThreadExecutor(),
         appView,
-        GraphLens.getIdentityLens(),
-        InitClassLens.getThrowingInstance(),
         NamingLens.getIdentityLens(),
         options,
         null);
   }
-  
+
   public static void disassemble(AndroidApp app, PrintStream ps) throws IOException {
     DexApplication application =
         new ApplicationReader(app, new InternalOptions(), Timing.empty()).read().toDirect();
diff --git a/src/test/java/com/android/tools/r8/dex/DebugByteCodeWriterTest.java b/src/test/java/com/android/tools/r8/dex/DebugByteCodeWriterTest.java
index 9c4c113..63dd7ed 100644
--- a/src/test/java/com/android/tools/r8/dex/DebugByteCodeWriterTest.java
+++ b/src/test/java/com/android/tools/r8/dex/DebugByteCodeWriterTest.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import com.android.tools.r8.naming.NamingLens;
@@ -51,9 +50,7 @@
                     .build()));
     return new ObjectToOffsetMapping(
         appView,
-        GraphLens.getIdentityLens(),
         NamingLens.getIdentityLens(),
-        InitClassLens.getThrowingInstance(),
         new LensCodeRewriterUtils(appView),
         Collections.emptyList(),
         Collections.emptyList(),
@@ -70,7 +67,7 @@
   @Test
   public void testEmptyDebugInfo() {
     DexDebugInfo debugInfo =
-        new EventBasedDebugInfo(1, DexString.EMPTY_ARRAY, new DexDebugEvent[] {});
+        new EventBasedDebugInfo(1, DexString.EMPTY_ARRAY, DexDebugEvent.EMPTY_ARRAY);
     DebugBytecodeWriter writer =
         new DebugBytecodeWriter(
             DexDebugInfo.convertToWritable(debugInfo),
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 6031ece..249e78d 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -48,8 +48,6 @@
 import com.android.tools.r8.graph.DexTypeList;
 import com.android.tools.r8.graph.DirectMappedDexApplication;
 import com.android.tools.r8.graph.GenericSignature.ClassSignature;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.MethodCollection.MethodCollectionFactory;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -883,8 +881,6 @@
         new ApplicationWriter(
             AppView.createForD8(AppInfo.createInitialAppInfo(application)),
             null,
-            GraphLens.getIdentityLens(),
-            InitClassLens.getThrowingInstance(),
             NamingLens.getIdentityLens());
     ExecutorService executor = ThreadUtils.getExecutorService(options);
     AndroidAppConsumers compatSink = new AndroidAppConsumers(options);
diff --git a/src/test/java/com/android/tools/r8/utils/Smali.java b/src/test/java/com/android/tools/r8/utils/Smali.java
index bdeecf4..ae1fdbf 100644
--- a/src/test/java/com/android/tools/r8/utils/Smali.java
+++ b/src/test/java/com/android/tools/r8/utils/Smali.java
@@ -11,8 +11,6 @@
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
 import com.google.common.collect.ImmutableList;
@@ -117,8 +115,6 @@
           new ApplicationWriter(
               AppView.createForD8(AppInfo.createInitialAppInfo(dexApp)),
               null,
-              GraphLens.getIdentityLens(),
-              InitClassLens.getThrowingInstance(),
               NamingLens.getIdentityLens());
       writer.write(executor);
       return consumer.contents;