Make NamingLens available through AppView

Change-Id: I5f65e22b034185d96454e2cd182ccf7ee6d59def
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 7cb5133..9393f4d 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -281,9 +281,8 @@
       Marker.checkCompatibleDesugaredLibrary(markers, options.reporter);
 
       InspectorImpl.runInspections(options.outputInspections, appView.appInfo().classes());
-      NamingLens namingLens = NamingLens.getIdentityLens();
-      namingLens = PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView, namingLens);
-      namingLens = RecordRewritingNamingLens.createRecordRewritingNamingLens(appView, namingLens);
+      appView.setNamingLens(PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView));
+      appView.setNamingLens(RecordRewritingNamingLens.createRecordRewritingNamingLens(appView));
 
       if (options.isGeneratingDex()
           && hasDexResources
@@ -294,17 +293,15 @@
         // without iterating again the IR. We fall-back to writing one app with rewriting and
         // merging it with the other app in rewriteNonDexInputs.
         timing.begin("Rewrite non-dex inputs");
-        DexApplication app =
-            rewriteNonDexInputs(
-                appView, inputApp, options, executor, timing, appView.appInfo().app(), namingLens);
+        DexApplication app = rewriteNonDexInputs(appView, inputApp, executor, timing);
         timing.end();
         appView.setAppInfo(
             new AppInfo(
                 appView.appInfo().getSyntheticItems().commit(app),
                 appView.appInfo().getMainDexInfo()));
-        namingLens = NamingLens.getIdentityLens();
+        appView.setNamingLens(NamingLens.getIdentityLens());
       } else if (options.isGeneratingDex() && hasDexResources) {
-        namingLens = NamingLens.getIdentityLens();
+        appView.setNamingLens(NamingLens.getIdentityLens());
       }
 
       // Since tracing is not lens aware, this needs to be done prior to synthetic finalization
@@ -322,21 +319,16 @@
 
       HorizontalClassMerger.createForD8ClassMerging(appView).runIfNecessary(executor, timing);
 
-      new GenericSignatureRewriter(appView, namingLens)
-          .runForD8(appView.appInfo().classes(), executor);
-      new KotlinMetadataRewriter(appView, namingLens).runForD8(executor);
+      new GenericSignatureRewriter(appView).runForD8(appView.appInfo().classes(), executor);
+      new KotlinMetadataRewriter(appView).runForD8(executor);
 
       if (options.isGeneratingClassFiles()) {
-        new CfApplicationWriter(appView, marker, namingLens)
-            .write(options.getClassFileConsumer(), inputApp);
+        new CfApplicationWriter(appView, marker).write(options.getClassFileConsumer(), inputApp);
       } else {
         if (options.apiModelingOptions().enableStubbingOfClasses) {
           new ApiReferenceStubber(appView).run(executor);
         }
-        new ApplicationWriter(
-                appView,
-                marker == null ? null : ImmutableList.copyOf(markers),
-                namingLens)
+        new ApplicationWriter(appView, marker == null ? null : ImmutableList.copyOf(markers))
             .write(executor, inputApp);
       }
       options.printWarnings();
@@ -357,13 +349,7 @@
   }
 
   private static DexApplication rewriteNonDexInputs(
-      AppView<AppInfo> appView,
-      AndroidApp inputApp,
-      InternalOptions options,
-      ExecutorService executor,
-      Timing timing,
-      DexApplication app,
-      NamingLens desugaringLens)
+      AppView<AppInfo> appView, AndroidApp inputApp, ExecutorService executor, Timing timing)
       throws IOException, ExecutionException {
     // TODO(b/154575955): Remove the naming lens in D8.
     appView
@@ -376,33 +362,33 @@
                     + " dex the class file inputs and dex merging only dex files."));
     List<DexProgramClass> dexProgramClasses = new ArrayList<>();
     List<DexProgramClass> nonDexProgramClasses = new ArrayList<>();
-    for (DexProgramClass aClass : app.classes()) {
+    for (DexProgramClass aClass : appView.appInfo().classes()) {
       if (aClass.originatesFromDexResource()) {
         dexProgramClasses.add(aClass);
       } else {
         nonDexProgramClasses.add(aClass);
       }
     }
-    DexApplication cfApp = app.builder().replaceProgramClasses(nonDexProgramClasses).build();
+    DexApplication cfApp =
+        appView.app().builder().replaceProgramClasses(nonDexProgramClasses).build();
     appView.setAppInfo(
         new AppInfo(
             appView.appInfo().getSyntheticItems().commit(cfApp),
             appView.appInfo().getMainDexInfo()));
     ConvertedCfFiles convertedCfFiles = new ConvertedCfFiles();
-    new GenericSignatureRewriter(appView, desugaringLens)
-        .run(appView.appInfo().classes(), executor);
-    new KotlinMetadataRewriter(appView, desugaringLens).runForD8(executor);
+    new GenericSignatureRewriter(appView).run(appView.appInfo().classes(), executor);
+    new KotlinMetadataRewriter(appView).runForD8(executor);
     new ApplicationWriter(
             appView,
             null,
-            desugaringLens,
             convertedCfFiles)
         .write(executor);
     AndroidApp.Builder builder = AndroidApp.builder(inputApp);
     builder.getProgramResourceProviders().clear();
     builder.addProgramResourceProvider(convertedCfFiles);
     AndroidApp newAndroidApp = builder.build();
-    DexApplication newApp = new ApplicationReader(newAndroidApp, options, timing).read(executor);
+    DexApplication newApp =
+        new ApplicationReader(newAndroidApp, appView.options(), timing).read(executor);
     DexApplication.Builder<?> finalDexApp = newApp.builder();
     for (DexProgramClass dexProgramClass : dexProgramClasses) {
       finalDexApp.addProgramClass(dexProgramClass);
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index f6149c8..b8163c7 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -13,7 +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.naming.NamingLens;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.ExceptionUtils;
@@ -103,11 +102,7 @@
         List<Marker> markers = appView.dexItemFactory().extractMarkers();
 
         assert !options.hasMethodsFilter();
-        ApplicationWriter writer =
-            new ApplicationWriter(
-                appView,
-                markers,
-                NamingLens.getIdentityLens());
+        ApplicationWriter writer = new ApplicationWriter(appView, markers);
         writer.write(executor);
         options.printWarnings();
       } catch (ExecutionException e) {
diff --git a/src/main/java/com/android/tools/r8/DexSplitterHelper.java b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
index b90b736..43b8e9a 100644
--- a/src/main/java/com/android/tools/r8/DexSplitterHelper.java
+++ b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.LazyLoadedDexApplication;
 import com.android.tools.r8.naming.ClassNameMapper;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.MainDexInfo;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.ExceptionUtils;
@@ -113,7 +112,6 @@
           new ApplicationWriter(
                   appView,
                   markers,
-                  NamingLens.getIdentityLens(),
                   consumer)
               .write(executor);
           options.printWarnings();
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 417fb63..27bdafd 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -38,7 +38,6 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineDesugaredLibrarySpecification;
 import com.android.tools.r8.jar.CfApplicationWriter;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -348,11 +347,7 @@
         AppView.createForD8(
             AppInfo.createInitialAppInfo(
                 builder.build(), GlobalSyntheticsStrategy.forNonSynthesizing()));
-    CfApplicationWriter writer =
-        new CfApplicationWriter(
-            appView,
-            options.getMarker(Tool.L8),
-            NamingLens.getIdentityLens());
+    CfApplicationWriter writer = new CfApplicationWriter(appView, options.getMarker(Tool.L8));
     ClassFileConsumer consumer =
         new ClassFileConsumer.ArchiveConsumer(
             lintFile(compilationApiLevel, minApiLevel, FileUtils.JAR_EXTENSION));
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index 8a8769a..f8d95ab 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.ir.desugar.TypeRewriter;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryAmender;
 import com.android.tools.r8.jar.CfApplicationWriter;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.PrefixRewritingNamingLens;
 import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
 import com.android.tools.r8.origin.CommandLineOrigin;
@@ -143,10 +142,10 @@
 
       SyntheticFinalization.finalize(appView, executor);
 
-      NamingLens namingLens = PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView);
-      new GenericSignatureRewriter(appView, namingLens).run(appView.appInfo().classes(), executor);
+      appView.setNamingLens(PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView));
+      new GenericSignatureRewriter(appView).run(appView.appInfo().classes(), executor);
 
-      new CfApplicationWriter(appView, options.getMarker(Tool.L8), namingLens)
+      new CfApplicationWriter(appView, options.getMarker(Tool.L8))
           .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 25a91e7..5d07a1c 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -63,7 +63,6 @@
 import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
 import com.android.tools.r8.kotlin.KotlinMetadataUtils;
 import com.android.tools.r8.naming.Minifier;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.PrefixRewritingNamingLens;
 import com.android.tools.r8.naming.ProguardMapMinifier;
 import com.android.tools.r8.naming.RecordRewritingNamingLens;
@@ -208,29 +207,24 @@
   }
 
   static void writeApplication(
-      ExecutorService executorService,
-      AppView<?> appView,
-      NamingLens namingLens,
-      InternalOptions options,
-      AndroidApp inputApp)
+      AppView<?> appView, AndroidApp inputApp, ExecutorService executorService)
       throws ExecutionException {
+    InternalOptions options = appView.options();
     InspectorImpl.runInspections(options.outputInspections, appView.appInfo().classes());
     try {
       Marker marker = options.getMarker(Tool.R8);
       assert marker != null;
       // Get the markers from the input which are different from the one created for this
       // compilation
-      Set<Marker> markers = new HashSet<>(options.itemFactory.extractMarkers());
+      Set<Marker> markers = new HashSet<>(appView.dexItemFactory().extractMarkers());
       markers.remove(marker);
       if (options.isGeneratingClassFiles()) {
-        new CfApplicationWriter(appView, marker, namingLens)
-            .write(options.getClassFileConsumer(), inputApp);
+        new CfApplicationWriter(appView, marker).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(),
-                namingLens)
+                ImmutableList.<Marker>builder().add(marker).addAll(markers).build())
             .write(executorService, inputApp);
       }
     } catch (IOException e) {
@@ -431,7 +425,7 @@
               annotationRemoverBuilder
                   .build(appViewWithLiveness, removedClasses);
           annotationRemover.ensureValid().run(executorService);
-          new GenericSignatureRewriter(appView, NamingLens.getIdentityLens(), genericContextBuilder)
+          new GenericSignatureRewriter(appView, genericContextBuilder)
               .run(appView.appInfo().classes(), executorService);
 
           assert appView.checkForTesting(() -> allReferencesAssignedApiLevel(appViewWithLiveness));
@@ -650,8 +644,7 @@
             AnnotationRemover.builder(Mode.FINAL_TREE_SHAKING)
                 .build(appView.withLiveness(), removedClasses)
                 .run(executorService);
-            new GenericSignatureRewriter(
-                    appView, NamingLens.getIdentityLens(), genericContextBuilder)
+            new GenericSignatureRewriter(appView, genericContextBuilder)
                 .run(appView.appInfo().classes(), executorService);
             assert appView.checkForTesting(
                     () ->
@@ -761,19 +754,17 @@
                   : null);
 
       // Perform minification.
-      NamingLens namingLens;
       if (options.getProguardConfiguration().hasApplyMappingFile()) {
         timing.begin("apply-mapping");
-        namingLens = new ProguardMapMinifier(appView.withLiveness()).run(executorService, timing);
+        appView.setNamingLens(
+            new ProguardMapMinifier(appView.withLiveness()).run(executorService, timing));
         timing.end();
         // Clear the applymapping data
         appView.clearApplyMappingSeedMapper();
       } else if (options.isMinifying()) {
         timing.begin("Minification");
-        namingLens = new Minifier(appView.withLiveness()).run(executorService, timing);
+        appView.setNamingLens(new Minifier(appView.withLiveness()).run(executorService, timing));
         timing.end();
-      } else {
-        namingLens = NamingLens.getIdentityLens();
       }
 
       assert verifyMovedMethodsHaveOriginalMethodPosition(appView, getDirectApp(appView));
@@ -808,16 +799,16 @@
         options.syntheticProguardRulesConsumer.accept(synthesizedProguardRules);
       }
 
-      namingLens = PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView, namingLens);
-      namingLens = RecordRewritingNamingLens.createRecordRewritingNamingLens(appView, namingLens);
+      appView.setNamingLens(PrefixRewritingNamingLens.createPrefixRewritingNamingLens(appView));
+      appView.setNamingLens(RecordRewritingNamingLens.createRecordRewritingNamingLens(appView));
 
       new ApiReferenceStubber(appView).run(executorService);
 
       timing.begin("MinifyKotlinMetadata");
-      new KotlinMetadataRewriter(appView, namingLens).runForR8(executorService);
+      new KotlinMetadataRewriter(appView).runForR8(executorService);
       timing.end();
 
-      new GenericSignatureRewriter(appView, namingLens, genericContextBuilderBeforeFinalMerging)
+      new GenericSignatureRewriter(appView, genericContextBuilderBeforeFinalMerging)
           .run(appView.appInfo().classes(), executorService);
 
       assert appView.checkForTesting(
@@ -829,15 +820,10 @@
                           .isValid())
           : "Could not validate generic signatures";
 
-      new DesugaredLibraryKeepRuleGenerator(appView, namingLens).runIfNecessary(timing);
+      new DesugaredLibraryKeepRuleGenerator(appView).runIfNecessary(timing);
 
       // Generate the resulting application resources.
-      writeApplication(
-          executorService,
-          appView,
-          namingLens,
-          options,
-          inputApp);
+      writeApplication(appView, inputApp, executorService);
 
       assert appView.getDontWarnConfiguration().validate(options);
 
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 4228cf4..c7547a8 100644
--- a/src/main/java/com/android/tools/r8/bisect/Bisect.java
+++ b/src/main/java/com/android/tools/r8/bisect/Bisect.java
@@ -14,7 +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.naming.NamingLens;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.AndroidAppConsumers;
@@ -175,7 +174,7 @@
   }
 
   private DexApplication readApp(Path apk, InternalOptions options, ExecutorService executor)
-      throws IOException, ExecutionException {
+      throws IOException {
     AndroidApp app = AndroidApp.builder().addProgramFiles(apk).build();
     return new ApplicationReader(app, options, timing).read(executor);
   }
@@ -191,8 +190,7 @@
         new ApplicationWriter(
             AppView.createForD8(
                 AppInfo.createInitialAppInfo(app, GlobalSyntheticsStrategy.forNonSynthesizing())),
-            null,
-            NamingLens.getIdentityLens());
+            null);
     writer.write(executor);
     options.signalFinishedToConsumers();
     compatSink.build().writeToDirectory(output, OutputMode.DexIndexed);
diff --git a/src/main/java/com/android/tools/r8/debuginfo/DebugRepresentation.java b/src/main/java/com/android/tools/r8/debuginfo/DebugRepresentation.java
index 634f40b..e9b23e7 100644
--- a/src/main/java/com/android/tools/r8/debuginfo/DebugRepresentation.java
+++ b/src/main/java/com/android/tools/r8/debuginfo/DebugRepresentation.java
@@ -5,15 +5,14 @@
 
 import com.android.tools.r8.dex.VirtualFile;
 import com.android.tools.r8.dex.code.DexInstruction;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexCode;
 import com.android.tools.r8.graph.DexDebugInfo;
 import com.android.tools.r8.graph.DexDebugInfo.PcBasedDebugInfo;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexString;
-import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.LebUtils;
 import com.android.tools.r8.utils.LineNumberOptimizer;
@@ -69,8 +68,8 @@
     this.paramToInfo = paramToInfo;
   }
 
-  public static void computeForFile(
-      VirtualFile file, GraphLens graphLens, NamingLens namingLens, InternalOptions options) {
+  public static void computeForFile(AppView<?> appView, VirtualFile file) {
+    InternalOptions options = appView.options();
     if (!options.canUseDexPc2PcAsDebugInformation()
         || options.canUseNativeDexPcInsteadOfDebugInfo()
         || options.testing.forcePcBasedEncoding) {
@@ -81,7 +80,7 @@
     Int2ReferenceMap<CostSummary> paramCountToCosts = new Int2ReferenceOpenHashMap<>();
     for (DexProgramClass clazz : file.classes()) {
       IdentityHashMap<DexString, List<ProgramMethod>> overloads =
-          LineNumberOptimizer.groupMethodsByRenamedName(graphLens, namingLens, clazz);
+          LineNumberOptimizer.groupMethodsByRenamedName(appView, clazz);
       for (List<ProgramMethod> methods : overloads.values()) {
         if (methods.size() != 1) {
           // Never use PC info for overloaded methods. They need distinct lines to disambiguate.
diff --git a/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java b/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
index eaec5a0..8dc8979 100644
--- a/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
+++ b/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
@@ -44,13 +44,10 @@
 public class DesugaredLibraryKeepRuleGenerator {
 
   private final AppView<AppInfoWithClassHierarchy> appView;
-  private final NamingLens namingLens;
   private final InternalOptions options;
 
-  public DesugaredLibraryKeepRuleGenerator(
-      AppView<AppInfoWithClassHierarchy> appView, NamingLens namingLens) {
+  public DesugaredLibraryKeepRuleGenerator(AppView<AppInfoWithClassHierarchy> appView) {
     this.appView = appView;
-    this.namingLens = namingLens;
     this.options = appView.options();
   }
 
@@ -68,7 +65,7 @@
         || !options.testing.enableExperimentalDesugaredLibraryKeepRuleGenerator) {
       return false;
     }
-    return namingLens.hasPrefixRewritingLogic()
+    return appView.getNamingLens().hasPrefixRewritingLogic()
         || options.machineDesugaredLibrarySpecification.hasEmulatedInterfaces();
   }
 
@@ -83,6 +80,7 @@
     byte[] synthesizedLibraryClassesPackageDescriptorPrefix =
         DexString.encodeToMutf8(
             "L" + desugaredLibrarySpecification.getSynthesizedLibraryClassesPackagePrefix());
+    NamingLens namingLens = appView.getNamingLens();
     return type ->
         namingLens.prefixRewrittenType(type) != null
             || desugaredLibrarySpecification.isEmulatedInterfaceRewrittenType(type)
@@ -91,7 +89,7 @@
   }
 
   private KeepRuleGenerator createTraceReferencesConsumer() {
-    return new KeepRuleGenerator(appView, namingLens);
+    return new KeepRuleGenerator(appView);
   }
 
   private static class KeepRuleGenerator extends TraceReferencesConsumer.ForwardingConsumer {
@@ -111,14 +109,13 @@
     // ArrayReference to DexType, nor conversions from (formal types, return type) to DexProto.
     private final Map<TypeReference, DexType> typeConversionCache = new ConcurrentHashMap<>();
 
-    private KeepRuleGenerator(
-        AppView<? extends AppInfoWithClassHierarchy> appView, NamingLens namingLens) {
+    private KeepRuleGenerator(AppView<? extends AppInfoWithClassHierarchy> appView) {
       super(
           TraceReferencesKeepRules.builder()
               .setOutputConsumer(appView.options().desugaredLibraryKeepRuleConsumer)
               .build());
       this.factory = appView.dexItemFactory();
-      this.namingLens = namingLens;
+      this.namingLens = appView.getNamingLens();
     }
 
     @Override
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 de006e9..62909df 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -83,7 +83,6 @@
 public class ApplicationWriter {
 
   public final AppView<?> appView;
-  public final NamingLens namingLens;
   public final InternalOptions options;
   private final CodeToKeep desugaredLibraryCodeToKeep;
   private final Predicate<DexType> isTypeMissing;
@@ -157,32 +156,30 @@
     }
   }
 
-  public ApplicationWriter(
-      AppView<?> appView,
-      List<Marker> markers,
-      NamingLens namingLens) {
+  public ApplicationWriter(AppView<?> appView, List<Marker> markers) {
     this(
         appView,
         markers,
-        namingLens,
         null);
   }
 
   public ApplicationWriter(
       AppView<?> appView,
       List<Marker> markers,
-      NamingLens namingLens,
       DexIndexedConsumer consumer) {
     this.appView = appView;
     this.options = appView.options();
-    this.desugaredLibraryCodeToKeep = CodeToKeep.createCodeToKeep(options, namingLens);
+    this.desugaredLibraryCodeToKeep = CodeToKeep.createCodeToKeep(appView);
     this.markers = markers;
-    this.namingLens = namingLens;
     this.programConsumer = consumer;
     this.isTypeMissing =
         PredicateUtils.isNull(appView.appInfo()::definitionForWithoutExistenceAssert);
   }
 
+  private NamingLens getNamingLens() {
+    return appView.getNamingLens();
+  }
+
   private List<VirtualFile> distribute(ExecutorService executorService)
       throws ExecutionException, IOException {
     Collection<DexProgramClass> classes = appView.appInfo().classes();
@@ -242,12 +239,12 @@
     Collection<DexProgramClass> classes = appView.appInfo().classes();
     Reference2LongMap<DexString> inputChecksums = new Reference2LongOpenHashMap<>(classes.size());
     for (DexProgramClass clazz : classes) {
-      inputChecksums.put(namingLens.lookupDescriptor(clazz.getType()), clazz.getChecksum());
+      inputChecksums.put(getNamingLens().lookupDescriptor(clazz.getType()), clazz.getChecksum());
     }
     for (VirtualFile file : files) {
       ClassesChecksum toWrite = new ClassesChecksum();
       for (DexProgramClass clazz : file.classes()) {
-        DexString desc = namingLens.lookupDescriptor(clazz.type);
+        DexString desc = getNamingLens().lookupDescriptor(clazz.type);
         toWrite.addChecksum(desc.toString(), inputChecksums.getLong(desc));
       }
       file.injectString(appView.dexItemFactory().createString(toWrite.toJsonString()));
@@ -307,7 +304,7 @@
 
       // TODO(b/151313617): Sorting annotations mutates elements so run single threaded on main.
       timing.begin("Sort Annotations");
-      SortAnnotations sortAnnotations = new SortAnnotations(namingLens);
+      SortAnnotations sortAnnotations = new SortAnnotations(getNamingLens());
       appView.appInfo().classes().forEach((clazz) -> clazz.addDependencies(sortAnnotations));
       timing.end();
 
@@ -322,8 +319,7 @@
                   Timing fileTiming = Timing.create("VirtualFile " + virtualFile.getId(), options);
                   computeOffsetMappingAndRewriteJumboStrings(
                       virtualFile, lazyDexStrings, fileTiming);
-                  DebugRepresentation.computeForFile(
-                      virtualFile, appView.graphLens(), namingLens, options);
+                  DebugRepresentation.computeForFile(appView, virtualFile);
                   fileTiming.end();
                   return fileTiming;
                 },
@@ -339,8 +335,7 @@
         DebugRepresentationPredicate representation =
             DebugRepresentation.fromFiles(virtualFiles, options);
         delayedProguardMapId.set(
-            runAndWriteMap(
-                inputApp, appView, namingLens, timing, originalSourceFiles, representation));
+            runAndWriteMap(inputApp, appView, timing, originalSourceFiles, representation));
       }
 
       // With the mapping id/hash known, it is safe to compute the remaining dex strings.
@@ -368,7 +363,7 @@
         merger.add(timings);
         merger.end();
         if (globalsSyntheticsConsumer != null) {
-          globalsSyntheticsConsumer.finished(appView, namingLens);
+          globalsSyntheticsConsumer.finished(appView);
         }
       }
 
@@ -380,7 +375,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, namingLens, options);
+      supplyAdditionalConsumers(appView);
     } finally {
       timing.end();
     }
@@ -484,7 +479,7 @@
       return;
     }
     timing.begin("Compute object offset mapping");
-    virtualFile.computeMapping(appView, namingLens, lazyDexStrings.size(), timing);
+    virtualFile.computeMapping(appView, lazyDexStrings.size(), timing);
     timing.end();
     timing.begin("Rewrite jumbo strings");
     rewriteCodeWithJumboStrings(
@@ -550,11 +545,8 @@
     byteBufferProvider.releaseByteBuffer(result.buffer.asByteBuffer());
   }
 
-  public static void supplyAdditionalConsumers(
-      DexApplication application,
-      AppView<?> appView,
-      NamingLens namingLens,
-      InternalOptions options) {
+  public static void supplyAdditionalConsumers(AppView<?> appView) {
+    InternalOptions options = appView.options();
     if (options.configurationConsumer != null) {
       ExceptionUtils.withConsumeResourceHandler(
           options.reporter, options.configurationConsumer,
@@ -563,22 +555,22 @@
     }
     if (options.mainDexListConsumer != null) {
       ExceptionUtils.withConsumeResourceHandler(
-          options.reporter, options.mainDexListConsumer, writeMainDexList(appView, namingLens));
+          options.reporter, options.mainDexListConsumer, writeMainDexList(appView));
       ExceptionUtils.withFinishedResourceHandler(options.reporter, options.mainDexListConsumer);
     }
 
     DataResourceConsumer dataResourceConsumer = options.dataResourceConsumer;
     if (dataResourceConsumer != null) {
-      ImmutableList<DataResourceProvider> dataResourceProviders = application.dataResourceProviders;
-      ResourceAdapter resourceAdapter =
-          new ResourceAdapter(appView, application.dexItemFactory, namingLens, options);
-
+      ImmutableList<DataResourceProvider> dataResourceProviders =
+          appView.app().dataResourceProviders;
+      ResourceAdapter resourceAdapter = new ResourceAdapter(appView);
       adaptAndPassDataResources(
           options, dataResourceConsumer, dataResourceProviders, resourceAdapter);
 
       // Write the META-INF/services resources. Sort on service names and keep the order from
       // the input for the implementation lines for deterministic output.
       if (!appView.appServices().isEmpty()) {
+        NamingLens namingLens = appView.getNamingLens();
         appView
             .appServices()
             .visit(
@@ -605,8 +597,7 @@
     if (options.featureSplitConfiguration != null) {
       for (DataResourceProvidersAndConsumer entry :
           options.featureSplitConfiguration.getDataResourceProvidersAndConsumers()) {
-        ResourceAdapter resourceAdapter =
-            new ResourceAdapter(appView, application.dexItemFactory, namingLens, options);
+        ResourceAdapter resourceAdapter = new ResourceAdapter(appView);
         adaptAndPassDataResources(
             options, entry.getConsumer(), entry.getProviders(), resourceAdapter);
       }
@@ -704,7 +695,7 @@
           } else {
             annotations.add(
                 DexAnnotation.createInnerClassAnnotation(
-                    namingLens.lookupInnerName(innerClass, options),
+                    getNamingLens().lookupInnerName(innerClass, options),
                     innerClass.getAccess(),
                     options.itemFactory));
             if (innerClass.getOuter() != null && innerClass.isNamed()) {
@@ -726,7 +717,7 @@
     if (clazz.getClassSignature().hasSignature()) {
       annotations.add(
           DexAnnotation.createSignatureAnnotation(
-              clazz.getClassSignature().toRenamedString(namingLens, isTypeMissing),
+              clazz.getClassSignature().toRenamedString(getNamingLens(), isTypeMissing),
               options.itemFactory));
     }
 
@@ -756,7 +747,7 @@
             ArrayUtils.appendSingleElement(
                 field.annotations().annotations,
                 DexAnnotation.createSignatureAnnotation(
-                    field.getGenericSignature().toRenamedString(namingLens, isTypeMissing),
+                    field.getGenericSignature().toRenamedString(getNamingLens(), isTypeMissing),
                     options.itemFactory))));
     field.clearGenericSignature();
   }
@@ -771,7 +762,7 @@
             ArrayUtils.appendSingleElement(
                 method.annotations().annotations,
                 DexAnnotation.createSignatureAnnotation(
-                    method.getGenericSignature().toRenamedString(namingLens, isTypeMissing),
+                    method.getGenericSignature().toRenamedString(getNamingLens(), isTypeMissing),
                     options.itemFactory))));
     method.clearGenericSignature();
   }
@@ -829,7 +820,7 @@
   private ByteBufferResult writeDexFile(
       ObjectToOffsetMapping objectMapping, ByteBufferProvider provider, Timing timing) {
     FileWriter fileWriter =
-        new FileWriter(appView, provider, objectMapping, namingLens, desugaredLibraryCodeToKeep);
+        new FileWriter(appView, provider, objectMapping, desugaredLibraryCodeToKeep);
     // Collect the non-fixed sections.
     timing.time("collect", fileWriter::collect);
     // Generate and write the bytes.
@@ -841,7 +832,7 @@
         .replace('.', '/') + ".class";
   }
 
-  private static String writeMainDexList(AppView<?> appView, NamingLens namingLens) {
+  private static String writeMainDexList(AppView<?> appView) {
     // TODO(b/178231294): Clean up by streaming directly to the consumer.
     MainDexInfo mainDexInfo = appView.appInfo().getMainDexInfo();
     StringBuilder builder = new StringBuilder();
@@ -849,7 +840,7 @@
     mainDexInfo.forEach(list::add);
     list.sort(DexType::compareTo);
     list.forEach(
-        type -> builder.append(mapMainDexListName(type, namingLens)).append('\n'));
+        type -> builder.append(mapMainDexListName(type, appView.getNamingLens())).append('\n'));
     return builder.toString();
   }
 
diff --git a/src/main/java/com/android/tools/r8/dex/CodeToKeep.java b/src/main/java/com/android/tools/r8/dex/CodeToKeep.java
index 6b77d5b..5a0ec34 100644
--- a/src/main/java/com/android/tools/r8/dex/CodeToKeep.java
+++ b/src/main/java/com/android/tools/r8/dex/CodeToKeep.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.dex;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProgramClass;
@@ -24,7 +25,9 @@
 
 public abstract class CodeToKeep {
 
-  static CodeToKeep createCodeToKeep(InternalOptions options, NamingLens namingLens) {
+  static CodeToKeep createCodeToKeep(AppView<?> appView) {
+    InternalOptions options = appView.options();
+    NamingLens namingLens = appView.getNamingLens();
     if ((!namingLens.hasPrefixRewritingLogic()
             && options.machineDesugaredLibrarySpecification.getMaintainType().isEmpty()
             && !options.machineDesugaredLibrarySpecification.hasEmulatedInterfaces())
@@ -32,7 +35,7 @@
         || options.testing.enableExperimentalDesugaredLibraryKeepRuleGenerator) {
       return new NopCodeToKeep();
     }
-    return new DesugaredLibraryCodeToKeep(namingLens, options);
+    return new DesugaredLibraryCodeToKeep(appView);
   }
 
   public abstract void recordMethod(DexMethod method);
@@ -58,17 +61,16 @@
       boolean all = false;
     }
 
-    private final NamingLens namingLens;
+    private final AppView<?> appView;
     private final Map<DexType, KeepStruct> toKeep = new ConcurrentHashMap<>();
-    private final InternalOptions options;
 
-    public DesugaredLibraryCodeToKeep(NamingLens namingLens, InternalOptions options) {
-      this.namingLens = namingLens;
-      this.options = options;
+    public DesugaredLibraryCodeToKeep(AppView<?> appView) {
+      this.appView = appView;
     }
 
     private boolean shouldKeep(DexType givenType) {
-      if (namingLens.prefixRewrittenType(givenType) != null
+      InternalOptions options = appView.options();
+      if (appView.getNamingLens().prefixRewrittenType(givenType) != null
           || options.machineDesugaredLibrarySpecification.isCustomConversionRewrittenType(givenType)
           || options.machineDesugaredLibrarySpecification.isEmulatedInterfaceRewrittenType(
               givenType)
@@ -84,14 +86,14 @@
       DexType type =
           InterfaceDesugaringSyntheticHelper.isCompanionClassType(givenType)
               ? InterfaceDesugaringSyntheticHelper.getInterfaceClassType(
-                  givenType, options.dexItemFactory())
+                  givenType, appView.dexItemFactory())
               : givenType;
       return options.machineDesugaredLibrarySpecification.getMaintainType().contains(type);
     }
 
     @Override
     public void recordMethod(DexMethod method) {
-      DexType baseType = method.holder.toBaseType(options.dexItemFactory());
+      DexType baseType = method.holder.toBaseType(appView.dexItemFactory());
       if (shouldKeep(baseType)) {
         keepClass(baseType);
         if (!method.holder.isArrayType()) {
@@ -110,7 +112,7 @@
 
     @Override
     public void recordField(DexField field) {
-      DexType baseType = field.holder.toBaseType(options.dexItemFactory());
+      DexType baseType = field.holder.toBaseType(appView.dexItemFactory());
       if (shouldKeep(baseType)) {
         keepClass(baseType);
         if (!field.holder.isArrayType()) {
@@ -146,7 +148,7 @@
     }
 
     private void keepClass(DexType type) {
-      DexType baseType = type.lookupBaseType(options.itemFactory);
+      DexType baseType = type.lookupBaseType(appView.dexItemFactory());
       toKeep.putIfAbsent(baseType, new KeepStruct());
     }
 
@@ -156,7 +158,7 @@
     }
 
     private String convertType(DexType type) {
-      DexString rewriteType = namingLens.prefixRewrittenType(type);
+      DexString rewriteType = appView.getNamingLens().prefixRewrittenType(type);
       DexString descriptor = rewriteType != null ? rewriteType : type.descriptor;
       return DescriptorUtils.descriptorToJavaType(descriptor.toString());
     }
@@ -166,13 +168,6 @@
       // TODO(b/134734081): Stream the consumer instead of building the String.
       StringBuilder sb = new StringBuilder();
       String cr = System.lineSeparator();
-      Comparator<DexReference> comparator =
-          new Comparator<DexReference>() {
-            @Override
-            public int compare(DexReference o1, DexReference o2) {
-              return o1.compareTo(o2);
-            }
-          };
       for (DexType type : CollectionUtils.sort(toKeep.keySet(), getComparator())) {
         KeepStruct keepStruct = toKeep.get(type);
         sb.append("-keep class ").append(convertType(type));
@@ -214,12 +209,7 @@
     }
 
     private static <T extends DexReference> Comparator<T> getComparator() {
-      return new Comparator<T>() {
-        @Override
-        public int compare(T o1, T o2) {
-          return o1.compareTo(o2);
-        }
-      };
+      return DexReference::compareTo;
     }
   }
 
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 245acb3..bc3a515 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -91,7 +91,6 @@
   private final AppView<?> appView;
   private final GraphLens graphLens;
   private final ObjectToOffsetMapping mapping;
-  private final NamingLens namingLens;
   private final InternalOptions options;
   private final DexOutputBuffer dest;
   private final MixedSectionOffsets mixedSectionOffsets;
@@ -102,18 +101,20 @@
       AppView<?> appView,
       ByteBufferProvider provider,
       ObjectToOffsetMapping mapping,
-      NamingLens namingLens,
       CodeToKeep desugaredLibraryCodeToKeep) {
     this.appView = appView;
     this.graphLens = appView.graphLens();
     this.mapping = mapping;
-    this.namingLens = namingLens;
     this.options = appView.options();
     this.dest = new DexOutputBuffer(provider);
     this.mixedSectionOffsets = new MixedSectionOffsets(options);
     this.desugaredLibraryCodeToKeep = desugaredLibraryCodeToKeep;
   }
 
+  private NamingLens getNamingLens() {
+    return appView.getNamingLens();
+  }
+
   public static void writeEncodedAnnotation(
       DexEncodedAnnotation annotation, DexOutputBuffer dest, ObjectToOffsetMapping mapping) {
     if (Log.ENABLED) {
@@ -410,7 +411,7 @@
   }
 
   private void writeTypeItem(DexType type) {
-    DexString descriptor = namingLens.lookupDescriptor(type);
+    DexString descriptor = getNamingLens().lookupDescriptor(type);
     dest.putInt(mapping.getOffsetFor(descriptor));
   }
 
@@ -427,7 +428,7 @@
     int typeIdx = mapping.getOffsetFor(field.type);
     assert (typeIdx & 0xFFFF) == typeIdx;
     dest.putShort((short) typeIdx);
-    DexString name = namingLens.lookupName(field);
+    DexString name = getNamingLens().lookupName(field);
     dest.putInt(mapping.getOffsetFor(name));
   }
 
@@ -438,7 +439,7 @@
     int protoIdx = mapping.getOffsetFor(method.proto);
     assert (protoIdx & 0xFFFF) == protoIdx;
     dest.putShort((short) protoIdx);
-    DexString name = namingLens.lookupName(method);
+    DexString name = getNamingLens().lookupName(method);
     dest.putInt(mapping.getOffsetFor(name));
   }
 
@@ -662,7 +663,7 @@
     // We have collected the individual components of this array due to the data stored in
     // DexEncodedField#staticValues. However, we have to collect the DexEncodedArray itself
     // here.
-    DexEncodedArray staticValues = clazz.computeStaticValuesArray(namingLens);
+    DexEncodedArray staticValues = clazz.computeStaticValuesArray(getNamingLens());
     if (staticValues != null) {
       staticFieldValues.put(clazz, staticValues);
       mixedSectionOffsets.add(staticValues);
diff --git a/src/main/java/com/android/tools/r8/dex/IndexedItemCollection.java b/src/main/java/com/android/tools/r8/dex/IndexedItemCollection.java
index 1de1144..4da7302 100644
--- a/src/main/java/com/android/tools/r8/dex/IndexedItemCollection.java
+++ b/src/main/java/com/android/tools/r8/dex/IndexedItemCollection.java
@@ -12,9 +12,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.GraphLens;
 import com.android.tools.r8.graph.IndexedDexItem;
-import com.android.tools.r8.graph.InitClassLens;
 
 /**
  * Common interface for constant pools.
@@ -101,14 +99,6 @@
    */
   boolean addMethodHandle(DexMethodHandle methodHandle);
 
-  default GraphLens getGraphLens() {
-    return GraphLens.getIdentityLens();
-  }
-
-  default InitClassLens getInitClassLens() {
-    return InitClassLens.getThrowingInstance();
-  }
-
   default DexString getRenamedName(DexMethod method) {
     return method.name;
   }
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 9978311..c78eaac 100644
--- a/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
+++ b/src/main/java/com/android/tools/r8/dex/InheritanceClassInDexDistributor.java
@@ -10,7 +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.naming.NamingLens;
 import com.android.tools.r8.utils.IntBox;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.collect.Maps;
@@ -70,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, namingLens);
+      VirtualFile virtualFile = new VirtualFile(0, appView);
       // Note: sort not needed.
       for (DexProgramClass clazz : members) {
         virtualFile.addClass(clazz);
@@ -286,7 +285,6 @@
   private final Set<DexProgramClass> classes;
   private final AppView<?> appView;
   private final IntBox nextFileId;
-  private final NamingLens namingLens;
   private final DirectSubClassesInfo directSubClasses;
 
   public InheritanceClassInDexDistributor(
@@ -295,7 +293,6 @@
       List<VirtualFile> filesForDistribution,
       Set<DexProgramClass> classes,
       IntBox nextFileId,
-      NamingLens namingLens,
       AppView<?> appView,
       ExecutorService executorService) {
     this.mainDex = mainDex;
@@ -303,7 +300,6 @@
     this.filesForDistribution = filesForDistribution;
     this.classes = classes;
     this.nextFileId = nextFileId;
-    this.namingLens = namingLens;
     this.appView = appView;
     this.executorService = executorService;
 
@@ -320,7 +316,7 @@
     // Allocate member of groups depending on
     // the main dex members
     VirtualFileCycler cycler =
-        new VirtualFileCycler(files, filesForDistribution, appView, namingLens, nextFileId);
+        new VirtualFileCycler(files, filesForDistribution, appView, nextFileId);
     for (Iterator<ClassGroup> iter = remainingInheritanceGroups.iterator(); iter.hasNext();) {
       ClassGroup group = iter.next();
       if (group.dependsOnMainDexClasses) {
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 eaf736d..e249186 100644
--- a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
+++ b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
@@ -37,16 +37,12 @@
   private final NamingLens namingLens;
   private final InternalOptions options;
 
-  public ResourceAdapter(
-      AppView<?> appView,
-      DexItemFactory dexItemFactory,
-      NamingLens namingLens,
-      InternalOptions options) {
+  public ResourceAdapter(AppView<?> appView) {
     this.appView = appView;
-    this.dexItemFactory = dexItemFactory;
+    this.dexItemFactory = appView.dexItemFactory();
     this.graphLens = appView.graphLens();
-    this.namingLens = namingLens;
-    this.options = options;
+    this.namingLens = appView.getNamingLens();
+    this.options = appView.options();
   }
 
   public DataEntryResource adaptIfNeeded(DataEntryResource file) {
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 d5995f4..4ca4b2b 100644
--- a/src/main/java/com/android/tools/r8/dex/VirtualFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
@@ -79,38 +79,32 @@
   private final DexProgramClass primaryClass;
   private DebugRepresentation debugRepresentation;
 
-  VirtualFile(
-      int id,
-      AppView<?> appView,
-      NamingLens namingLens) {
-    this(id, appView, namingLens, null, null);
+  VirtualFile(int id, AppView<?> appView) {
+    this(id, appView, null, null);
   }
 
   VirtualFile(
       int id,
       AppView<?> appView,
-      NamingLens namingLens,
       FeatureSplit featureSplit) {
-    this(id, appView, namingLens, null, featureSplit);
+    this(id, appView, null, featureSplit);
   }
 
   private VirtualFile(
       int id,
       AppView<?> appView,
-      NamingLens namingLens,
       DexProgramClass primaryClass) {
-    this(id, appView, namingLens, primaryClass, null);
+    this(id, appView, primaryClass, null);
   }
 
   private VirtualFile(
       int id,
       AppView<?> appView,
-      NamingLens namingLens,
       DexProgramClass primaryClass,
       FeatureSplit featureSplit) {
     this.id = id;
-    this.indexedItems = new VirtualFileIndexedItemCollection(appView, namingLens);
-    this.transaction = new IndexedItemTransaction(indexedItems, appView, namingLens);
+    this.indexedItems = new VirtualFileIndexedItemCollection(appView);
+    this.transaction = new IndexedItemTransaction(indexedItems, appView);
     this.primaryClass = primaryClass;
     this.featureSplit = featureSplit;
   }
@@ -199,7 +193,6 @@
 
   public void computeMapping(
       AppView<?> appView,
-      NamingLens namingLens,
       int lazyDexStringsCount,
       Timing timing) {
     assert transaction.isEmpty();
@@ -207,7 +200,6 @@
     objectMapping =
         new ObjectToOffsetMapping(
             appView,
-            namingLens,
             transaction.rewriter,
             indexedItems.classes,
             indexedItems.protos,
@@ -326,8 +318,7 @@
         //  duplicated.
         if (!combineSyntheticClassesWithPrimaryClass
             || !appView.getSyntheticItems().isSyntheticClass(clazz)) {
-          VirtualFile file =
-              new VirtualFile(virtualFiles.size(), appView, writer.namingLens, clazz);
+          VirtualFile file = new VirtualFile(virtualFiles.size(), appView, clazz);
           virtualFiles.add(file);
           file.addClass(clazz);
           files.put(clazz, file);
@@ -365,7 +356,7 @@
       this.classes = SetUtils.newIdentityHashSet(classes);
 
       // Create the primary dex file. The distribution will add more if needed.
-      mainDexFile = new VirtualFile(0, appView, writer.namingLens);
+      mainDexFile = new VirtualFile(0, appView);
       assert virtualFiles.isEmpty();
       virtualFiles.add(mainDexFile);
       addMarkers(mainDexFile);
@@ -446,7 +437,6 @@
             new VirtualFile(
                 nextFileId.getAndIncrement(),
                 appView,
-                writer.namingLens,
                 featureSplitSetEntry.getKey());
         virtualFiles.add(featureFile);
         addMarkers(featureFile);
@@ -458,8 +448,7 @@
                 appView,
                 featureSplitSetEntry.getValue(),
                 originalNames,
-                nextFileId,
-                writer.namingLens)
+                nextFileId)
             .run();
       }
     }
@@ -510,19 +499,12 @@
                 filesForDistribution,
                 classes,
                 nextFileId,
-                writer.namingLens,
                 appView,
                 executorService)
             .distribute();
       } else {
         new PackageSplitPopulator(
-                virtualFiles,
-                filesForDistribution,
-                appView,
-                classes,
-                originalNames,
-                nextFileId,
-                writer.namingLens)
+                virtualFiles, filesForDistribution, appView, classes, originalNames, nextFileId)
             .run();
       }
       addFeatureSplitFiles(featureSplitClasses);
@@ -573,10 +555,10 @@
     private final Set<DexCallSite> callSites = Sets.newIdentityHashSet();
     private final Set<DexMethodHandle> methodHandles = Sets.newIdentityHashSet();
 
-    public VirtualFileIndexedItemCollection(AppView<?> appView, NamingLens namingLens) {
+    public VirtualFileIndexedItemCollection(AppView<?> appView) {
       this.graphLens = appView.graphLens();
       this.initClassLens = appView.initClassLens();
-      this.namingLens = namingLens;
+      this.namingLens = appView.getNamingLens();
     }
 
     @Override
@@ -633,16 +615,6 @@
     }
 
     @Override
-    public GraphLens getGraphLens() {
-      return graphLens;
-    }
-
-    @Override
-    public InitClassLens getInitClassLens() {
-      return initClassLens;
-    }
-
-    @Override
     public DexString getRenamedDescriptor(DexType type) {
       return namingLens.lookupDescriptor(type);
     }
@@ -664,8 +636,6 @@
 
     private final AppView<?> appView;
     private final VirtualFileIndexedItemCollection base;
-    private final InitClassLens initClassLens;
-    private final NamingLens namingLens;
     private final LensCodeRewriterUtils rewriter;
 
     private final Set<DexProgramClass> classes = new LinkedHashSet<>();
@@ -677,17 +647,16 @@
     private final Set<DexCallSite> callSites = new LinkedHashSet<>();
     private final Set<DexMethodHandle> methodHandles = new LinkedHashSet<>();
 
-    private IndexedItemTransaction(
-        VirtualFileIndexedItemCollection base,
-        AppView<?> appView,
-        NamingLens namingLens) {
+    private IndexedItemTransaction(VirtualFileIndexedItemCollection base, AppView<?> appView) {
       this.appView = appView;
       this.base = base;
-      this.initClassLens = appView.initClassLens();
-      this.namingLens = namingLens;
       this.rewriter = new LensCodeRewriterUtils(appView, true);
     }
 
+    private NamingLens getNamingLens() {
+      return appView.getNamingLens();
+    }
+
     private <T extends DexItem> boolean maybeInsert(T item, Set<T> set, Set<T> baseSet) {
       if (baseSet.contains(item) || set.contains(item)) {
         return false;
@@ -697,7 +666,7 @@
     }
 
     void addClassAndDependencies(DexProgramClass clazz) {
-      clazz.collectIndexedItems(this, getGraphLens(), rewriter);
+      clazz.collectIndexedItems(appView, this, rewriter);
     }
 
     @Override
@@ -742,29 +711,19 @@
     }
 
     @Override
-    public GraphLens getGraphLens() {
-      return appView.graphLens();
-    }
-
-    @Override
-    public InitClassLens getInitClassLens() {
-      return initClassLens;
-    }
-
-    @Override
     public DexString getRenamedDescriptor(DexType type) {
-      return namingLens.lookupDescriptor(type);
+      return getNamingLens().lookupDescriptor(type);
     }
 
     @Override
     public DexString getRenamedName(DexMethod method) {
-      assert namingLens.verifyRenamingConsistentWithResolution(method);
-      return namingLens.lookupName(method);
+      assert getNamingLens().verifyRenamingConsistentWithResolution(method);
+      return getNamingLens().lookupName(method);
     }
 
     @Override
     public DexString getRenamedName(DexField field) {
-      return namingLens.lookupName(field);
+      return getNamingLens().lookupName(field);
     }
 
     int getNumberOfMethods() {
@@ -830,7 +789,6 @@
     private final List<VirtualFile> files;
     private final List<VirtualFile> filesForDistribution;
     private final AppView<?> appView;
-    private final NamingLens namingLens;
 
     private final IntBox nextFileId;
     private Iterator<VirtualFile> allFilesCyclic;
@@ -841,12 +799,10 @@
         List<VirtualFile> files,
         List<VirtualFile> filesForDistribution,
         AppView<?> appView,
-        NamingLens namingLens,
         IntBox nextFileId) {
       this.files = files;
       this.filesForDistribution = new ArrayList<>(filesForDistribution);
       this.appView = appView;
-      this.namingLens = namingLens;
       this.nextFileId = nextFileId;
 
       if (filesForDistribution.size() > 0) {
@@ -917,8 +873,7 @@
     }
 
     private VirtualFile internalAddFile() {
-      VirtualFile newFile =
-          new VirtualFile(nextFileId.getAndIncrement(), appView, namingLens, featureSplit);
+      VirtualFile newFile = new VirtualFile(nextFileId.getAndIncrement(), appView, featureSplit);
       files.add(newFile);
       filesForDistribution.add(newFile);
       return newFile;
@@ -1061,14 +1016,12 @@
         AppView<?> appView,
         Collection<DexProgramClass> classes,
         Map<DexProgramClass, String> originalNames,
-        IntBox nextFileId,
-        NamingLens namingLens) {
+        IntBox nextFileId) {
       this.classPartioning = PackageSplitClassPartioning.create(classes, appView, originalNames);
       this.originalNames = originalNames;
       this.dexItemFactory = appView.dexItemFactory();
       this.options = appView.options();
-      this.cycler =
-          new VirtualFileCycler(files, filesForDistribution, appView, namingLens, nextFileId);
+      this.cycler = new VirtualFileCycler(files, filesForDistribution, appView, nextFileId);
     }
 
     static boolean coveredByPrefix(String originalName, String currentPrefix) {
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 06f7a38..939866d 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -60,11 +61,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 cdff382..7fafee9 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -60,11 +61,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 c9eceef..fad4723 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.InternalCompilerError;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexMethodHandle;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -92,9 +93,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     DexMethodHandle rewritten =
         rewriter.rewriteDexMethodHandle(
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 5f73b75..25727a7 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.InternalCompilerError;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -88,9 +89,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     DexProto rewritten = rewriter.rewriteProto(getMethodType());
     rewritten.collectIndexedItems(indexedItems);
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 04334a8..0117785 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.InternalCompilerError;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -41,9 +42,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     getString().collectIndexedItems(indexedItems);
   }
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 add1531..0813d05 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -44,11 +45,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 c5938dc..c6544b2 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -44,11 +45,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 dbbecdb..5ccccb9 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -60,9 +61,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 72bfaee..3cb41fb 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -43,9 +44,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 5010e51..20bec92 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -69,9 +70,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 d9b64d5..46d615b 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -60,9 +61,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 74c0f70..29c2224 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -68,9 +69,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 da4183d..c63962f 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -60,9 +61,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 e9ea003..ae07163 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -59,9 +60,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 d38324f..1194963 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -71,9 +72,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 877808b..21061c3 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -89,9 +90,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 eab6c99..5f3213e 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -76,9 +77,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 7c2f81d..84921eb 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -76,9 +77,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 88d1325..395ac6e 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -93,9 +94,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 0db6f83..e7d6f0c 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -70,9 +71,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 583cff3..ee90cf8 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -74,9 +75,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 b1372da..878cc7b 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -59,9 +60,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 b964ee3..82e033a 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
@@ -6,6 +6,7 @@
 import static com.android.tools.r8.dex.Constants.U8BIT_MAX;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.IndexedDexItem;
@@ -69,9 +70,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     BBBBBBBB.collectIndexedItems(indexedItems);
   }
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 9014f21..04e57f1 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -64,9 +65,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 e9f1ae5..cc57a14 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -79,9 +80,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 c854dad..f9a7792 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
@@ -6,6 +6,7 @@
 import static com.android.tools.r8.dex.Constants.U16BIT_MAX;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -72,9 +73,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 58970bd..e09b9d5 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
@@ -6,6 +6,7 @@
 import static com.android.tools.r8.dex.Constants.U4BIT_MAX;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.GraphLens;
@@ -95,12 +96,12 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
-        graphLens.lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC);
+        appView.graphLens().lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC);
     assert lookup.getType() == Type.POLYMORPHIC;
     lookup.getReference().collectIndexedItems(indexedItems);
 
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 f459f21..04dc240 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.GraphLens;
@@ -111,12 +112,12 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
-        graphLens.lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC);
+        appView.graphLens().lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC);
     assert lookup.getType() == Type.POLYMORPHIC;
     lookup.getReference().collectIndexedItems(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 438c4fb..fa88721 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -64,9 +65,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // No references.
   }
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 2ab30bc..6d763e8 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -23,11 +24,11 @@
 
   @Override
   public final void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexField rewritten = graphLens.lookupField(getField());
+    DexField rewritten = appView.graphLens().lookupField(getField());
     rewritten.collectIndexedItems(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 87463b3..4c7b12d 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
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
@@ -46,14 +47,14 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       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);
-    DexField clinitField = indexedItems.getInitClassLens().getInitClassField(rewrittenClass);
+    DexType rewrittenClass = appView.graphLens().lookupType(clazz);
+    DexField clinitField = appView.initClassLens().getInitClassField(rewrittenClass);
     clinitField.collectIndexedItems(indexedItems);
   }
 
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 d5eaa35..400a152 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -55,11 +56,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 eebd95a..cc35c46 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
@@ -7,6 +7,7 @@
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.InternalCompilerError;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexCallSite;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
@@ -396,9 +397,9 @@
       LensCodeRewriterUtils rewriter);
 
   public abstract void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter);
 
   public boolean equals(
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 4e73b38..739ddae 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexCallSite;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -45,9 +46,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     DexCallSite rewritten = rewriter.rewriteCallSite(getCallSite(), context);
     rewritten.collectIndexedItems(indexedItems);
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 bae7f30..ddd958b 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexCallSite;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -45,9 +46,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     DexCallSite rewritten = rewriter.rewriteCallSite(getCallSite(), context);
     rewritten.collectIndexedItems(indexedItems);
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 f5211b1..2bf97f2 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
@@ -25,12 +26,15 @@
 
   @Override
   public final void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     DexMethod rewritten =
-        graphLens.lookupMethod(getMethod(), context.getReference(), getInvokeType()).getReference();
+        appView
+            .graphLens()
+            .lookupMethod(getMethod(), context.getReference(), getInvokeType())
+            .getReference();
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 db983f1..97032a0 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
@@ -25,12 +26,15 @@
 
   @Override
   public final void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     DexMethod rewritten =
-        graphLens.lookupMethod(getMethod(), context.getReference(), getInvokeType()).getReference();
+        appView
+            .graphLens()
+            .lookupMethod(getMethod(), context.getReference(), getInvokeType())
+            .getReference();
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 a6930f3..26e5c62 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -40,9 +41,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     getItem().collectIndexedItems(indexedItems);
   }
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 70fba01..11f3966 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -45,11 +46,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 4867c22..ef1fd9a 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -51,11 +52,11 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexType rewritten = graphLens.lookupType(getType());
+    DexType rewritten = appView.graphLens().lookupType(getType());
     rewritten.collectIndexedItems(indexedItems);
   }
 
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 235aaca..387952c 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -51,9 +52,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     throw new Unreachable();
   }
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 14e564b..83dad56 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
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -37,9 +38,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     for (DexField field : fields) {
       field.collectIndexedItems(indexedItems);
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 959659c..231984d 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
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex.code;
 
 import com.android.tools.r8.dex.IndexedItemCollection;
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
@@ -24,11 +25,11 @@
 
   @Override
   public final void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
-    DexField rewritten = graphLens.lookupField(getField());
+    DexField rewritten = appView.graphLens().lookupField(getField());
     rewritten.collectIndexedItems(indexedItems);
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 112de40..57251a2 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -30,6 +30,7 @@
 import com.android.tools.r8.ir.optimize.info.field.InstanceFieldInitializationInfoFactory;
 import com.android.tools.r8.ir.optimize.library.LibraryMemberOptimizer;
 import com.android.tools.r8.ir.optimize.library.LibraryMethodSideEffectModelCollection;
+import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.SeedMapper;
 import com.android.tools.r8.optimize.argumentpropagation.ArgumentPropagator;
 import com.android.tools.r8.optimize.interfaces.collection.OpenClosedInterfacesCollection;
@@ -78,6 +79,7 @@
   private GraphLens codeLens = GraphLens.getIdentityLens();
   private GraphLens graphLens = GraphLens.getIdentityLens();
   private InitClassLens initClassLens;
+  private NamingLens namingLens = NamingLens.getIdentityLens();
   private ProguardCompatibilityActions proguardCompatibilityActions;
   private RootSet rootSet;
   private MainDexRootSet mainDexRootSet = null;
@@ -574,6 +576,14 @@
     return getKeepInfo().getMethodInfo(method);
   }
 
+  public NamingLens getNamingLens() {
+    return namingLens;
+  }
+
+  public void setNamingLens(NamingLens namingLens) {
+    this.namingLens = namingLens;
+  }
+
   public boolean hasProguardCompatibilityActions() {
     return proguardCompatibilityActions != null;
   }
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 906d92d..b001aa2 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -174,9 +174,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     getParentConstructor(context, rewriter.dexItemFactory()).collectIndexedItems(indexedItems);
   }
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 8dd617b..8e7b80e 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -589,14 +589,14 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     highestSortingString = null;
     for (DexInstruction insn : instructions) {
       assert !insn.isDexItemBasedConstString();
-      insn.collectIndexedItems(indexedItems, context, graphLens, rewriter);
+      insn.collectIndexedItems(appView, indexedItems, context, rewriter);
       if (insn.isConstString()) {
         updateHighestSortingString(insn.asConstString().getString());
       } else if (insn.isConstStringJumbo()) {
@@ -604,10 +604,10 @@
       }
     }
     if (debugInfo != null) {
-      getDebugInfoForWriting().collectIndexedItems(indexedItems, graphLens);
+      getDebugInfoForWriting().collectIndexedItems(indexedItems, appView.graphLens());
     }
     for (TryHandler handler : handlers) {
-      handler.collectIndexedItems(indexedItems, graphLens);
+      handler.collectIndexedItems(indexedItems, appView.graphLens());
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 5e30d52..2f5f6da 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -401,7 +401,7 @@
   }
 
   public void collectIndexedItems(
-      IndexedItemCollection indexedItems, GraphLens graphLens, LensCodeRewriterUtils rewriter) {
+      AppView<?> appView, IndexedItemCollection indexedItems, LensCodeRewriterUtils rewriter) {
     if (indexedItems.addClass(this)) {
       type.collectIndexedItems(indexedItems);
       if (superType != null) {
@@ -424,7 +424,7 @@
       }
       // We are explicitly not adding items referenced in signatures.
       forEachProgramField(field -> field.collectIndexedItems(indexedItems));
-      forEachProgramMethod(method -> method.collectIndexedItems(indexedItems, graphLens, rewriter));
+      forEachProgramMethod(method -> method.collectIndexedItems(appView, indexedItems, rewriter));
     }
   }
 
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 ef6bd3b..1458f08 100644
--- a/src/main/java/com/android/tools/r8/graph/DexWritableCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexWritableCode.java
@@ -54,9 +54,9 @@
   int codeSizeInBytes();
 
   void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter);
 
   void collectMixedSectionItems(MixedSectionCollection mixedItems);
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 e915bb6..6173bef 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
@@ -53,7 +53,6 @@
 
   public ObjectToOffsetMapping(
       AppView<?> appView,
-      NamingLens namingLens,
       LensCodeRewriterUtils lensCodeRewriter,
       Collection<DexProgramClass> classes,
       Collection<DexProto> protos,
@@ -77,7 +76,7 @@
     this.lazyDexStringsCount = lazyDexStringsCount;
     this.appView = appView;
     this.graphLens = appView.graphLens();
-    this.namingLens = namingLens;
+    this.namingLens = appView.getNamingLens();
     this.initClassLens = appView.initClassLens();
     this.lensCodeRewriter = lensCodeRewriter;
     timing.begin("Sort strings");
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 37d165b..9be5f56 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -65,13 +65,13 @@
   }
 
   public void collectIndexedItems(
-      IndexedItemCollection indexedItems, GraphLens graphLens, LensCodeRewriterUtils rewriter) {
+      AppView<?> appView, IndexedItemCollection indexedItems, LensCodeRewriterUtils rewriter) {
     DexEncodedMethod definition = getDefinition();
     assert !definition.isObsolete();
     getReference().collectIndexedItems(indexedItems);
     if (definition.hasCode()) {
       Code code = definition.getCode();
-      code.asDexWritableCode().collectIndexedItems(indexedItems, this, graphLens, rewriter);
+      code.asDexWritableCode().collectIndexedItems(appView, indexedItems, this, rewriter);
     }
     definition.annotations().collectIndexedItems(indexedItems);
     definition.parameterAnnotationsList.collectIndexedItems(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 d2a55cb..04290a0 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
@@ -77,9 +77,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     rewriter
         .dexItemFactory()
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 b2418cb..cac6f7a 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
@@ -86,9 +86,9 @@
 
   @Override
   public void collectIndexedItems(
+      AppView<?> appView,
       IndexedItemCollection indexedItems,
       ProgramMethod context,
-      GraphLens graphLens,
       LensCodeRewriterUtils rewriter) {
     // Intentionally empty.
   }
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 3ac9bc61..418a665 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -88,17 +88,15 @@
 
   private final DexApplication application;
   private final AppView<?> appView;
-  private final NamingLens namingLens;
   private final InternalOptions options;
   private final Marker marker;
   private final Predicate<DexType> isTypeMissing;
 
   private static final CfVersion MIN_VERSION_FOR_COMPILER_GENERATED_CODE = CfVersion.V1_6;
 
-  public CfApplicationWriter(AppView<?> appView, Marker marker, NamingLens namingLens) {
+  public CfApplicationWriter(AppView<?> appView, Marker marker) {
     this.application = appView.appInfo().app();
     this.appView = appView;
-    this.namingLens = namingLens;
     this.options = appView.options();
     assert marker != null;
     this.marker = marker;
@@ -106,6 +104,10 @@
         PredicateUtils.isNull(appView.appInfo()::definitionForWithoutExistenceAssert);
   }
 
+  private NamingLens getNamingLens() {
+    return appView.getNamingLens();
+  }
+
   public void write(ClassFileConsumer consumer) {
     assert options.proguardMapConsumer == null;
     write(consumer, null);
@@ -138,7 +140,6 @@
           runAndWriteMap(
               inputApp,
               appView,
-              namingLens,
               application.timing,
               OriginalSourceFiles.fromClasses(),
               DebugRepresentation.none(options));
@@ -174,9 +175,9 @@
         writeClassCatchingErrors(
             clazz, globalsConsumer, rewriter, markerString, sourceFileEnvironment);
       }
-      globalsConsumer.finished(appView, namingLens);
+      globalsConsumer.finished(appView);
     }
-    ApplicationWriter.supplyAdditionalConsumers(application, appView, namingLens, options);
+    ApplicationWriter.supplyAdditionalConsumers(appView);
   }
 
   private void writeClassCatchingErrors(
@@ -248,16 +249,16 @@
     if (clazz.isDeprecated()) {
       access = AsmUtils.withDeprecated(access);
     }
-    String desc = namingLens.lookupDescriptor(clazz.type).toString();
-    String name = namingLens.lookupInternalName(clazz.type);
-    String signature = clazz.getClassSignature().toRenamedString(namingLens, isTypeMissing);
+    String desc = getNamingLens().lookupDescriptor(clazz.type).toString();
+    String name = getNamingLens().lookupInternalName(clazz.type);
+    String signature = clazz.getClassSignature().toRenamedString(getNamingLens(), isTypeMissing);
     String superName =
         clazz.type == options.itemFactory.objectType
             ? null
-            : namingLens.lookupInternalName(clazz.superType);
+            : getNamingLens().lookupInternalName(clazz.superType);
     String[] interfaces = new String[clazz.interfaces.values.length];
     for (int i = 0; i < clazz.interfaces.values.length; i++) {
-      interfaces[i] = namingLens.lookupInternalName(clazz.interfaces.values[i]);
+      interfaces[i] = getNamingLens().lookupInternalName(clazz.interfaces.values[i]);
     }
     assert SyntheticNaming.verifyNotInternalSynthetic(name);
     writer.visit(version.raw(), access, name, signature, superName, interfaces);
@@ -266,15 +267,15 @@
     ImmutableMap<DexString, DexValue> defaults = getAnnotationDefaults(clazz.annotations());
 
     if (clazz.getEnclosingMethodAttribute() != null) {
-      clazz.getEnclosingMethodAttribute().write(writer, namingLens);
+      clazz.getEnclosingMethodAttribute().write(writer, getNamingLens());
     }
 
     if (clazz.getNestHostClassAttribute() != null) {
-      clazz.getNestHostClassAttribute().write(writer, namingLens);
+      clazz.getNestHostClassAttribute().write(writer, getNamingLens());
     }
 
     for (NestMemberClassAttribute entry : clazz.getNestMembersClassAttributes()) {
-      entry.write(writer, namingLens);
+      entry.write(writer, getNamingLens());
       assert clazz.getNestHostClassAttribute() == null
           : "A nest host cannot also be a nest member.";
     }
@@ -282,17 +283,17 @@
     if (clazz.isRecord()) {
       // TODO(b/169645628): Strip record components if not kept.
       for (DexEncodedField instanceField : clazz.instanceFields()) {
-        String componentName = namingLens.lookupName(instanceField.getReference()).toString();
+        String componentName = getNamingLens().lookupName(instanceField.getReference()).toString();
         String componentDescriptor =
-            namingLens.lookupDescriptor(instanceField.getReference().type).toString();
+            getNamingLens().lookupDescriptor(instanceField.getReference().type).toString();
         String componentSignature =
-            instanceField.getGenericSignature().toRenamedString(namingLens, isTypeMissing);
+            instanceField.getGenericSignature().toRenamedString(getNamingLens(), isTypeMissing);
         writer.visitRecordComponent(componentName, componentDescriptor, componentSignature);
       }
     }
 
     for (InnerClassAttribute entry : clazz.getInnerClasses()) {
-      entry.write(writer, namingLens, options);
+      entry.write(writer, getNamingLens(), options);
     }
 
     for (DexEncodedField field : clazz.staticFields()) {
@@ -328,11 +329,11 @@
   }
 
   private int compareTypesThroughLens(DexType a, DexType b) {
-    return namingLens.lookupDescriptor(a).compareTo(namingLens.lookupDescriptor(b));
+    return getNamingLens().lookupDescriptor(a).compareTo(getNamingLens().lookupDescriptor(b));
   }
 
   private DexString returnTypeThroughLens(DexMethod method) {
-    return namingLens.lookupDescriptor(method.getReturnType());
+    return getNamingLens().lookupDescriptor(method.getReturnType());
   }
 
   private int compareMethodsThroughLens(ProgramMethod a, ProgramMethod b) {
@@ -422,7 +423,7 @@
     DexValue[] values = value.asDexValueArray().getValues();
     String[] res = new String[values.length];
     for (int i = 0; i < values.length; i++) {
-      res[i] = namingLens.lookupInternalName(values[i].asDexValueType().value);
+      res[i] = getNamingLens().lookupInternalName(values[i].asDexValueType().value);
     }
     return res;
   }
@@ -439,9 +440,9 @@
     if (field.isDeprecated()) {
       access = AsmUtils.withDeprecated(access);
     }
-    String name = namingLens.lookupName(field.getReference()).toString();
-    String desc = namingLens.lookupDescriptor(field.getReference().type).toString();
-    String signature = field.getGenericSignature().toRenamedString(namingLens, isTypeMissing);
+    String name = getNamingLens().lookupName(field.getReference()).toString();
+    String desc = getNamingLens().lookupDescriptor(field.getReference().type).toString();
+    String signature = field.getGenericSignature().toRenamedString(getNamingLens(), isTypeMissing);
     Object value = getStaticValue(field);
     FieldVisitor visitor = writer.visitField(access, name, desc, signature, value);
     writeAnnotations(visitor::visitAnnotation, field.annotations().annotations);
@@ -454,13 +455,11 @@
       LensCodeRewriterUtils rewriter,
       ClassWriter writer,
       ImmutableMap<DexString, DexValue> defaults) {
-    NamingLens namingLens = this.namingLens;
-
     // For "pass through" classes which has already been library desugared use the identity lens.
-    if (appView.isAlreadyLibraryDesugared(method.getHolder())) {
-      namingLens = NamingLens.getIdentityLens();
-    }
-
+    NamingLens namingLens =
+        appView.isAlreadyLibraryDesugared(method.getHolder())
+            ? NamingLens.getIdentityLens()
+            : getNamingLens();
     DexEncodedMethod definition = method.getDefinition();
     int access = definition.getAccessFlags().getAsCfAccessFlags();
     if (definition.isDeprecated()) {
@@ -540,7 +539,7 @@
       }
       AnnotationVisitor v =
           visitor.visit(
-              namingLens.lookupDescriptor(dexAnnotation.annotation.type).toString(),
+              getNamingLens().lookupDescriptor(dexAnnotation.annotation.type).toString(),
               dexAnnotation.visibility == DexAnnotation.VISIBILITY_RUNTIME);
       if (v != null) {
         writeAnnotation(v, dexAnnotation.annotation);
@@ -562,7 +561,7 @@
           DexValueAnnotation valueAnnotation = value.asDexValueAnnotation();
           AnnotationVisitor innerVisitor =
               visitor.visitAnnotation(
-                  name, namingLens.lookupDescriptor(valueAnnotation.value.type).toString());
+                  name, getNamingLens().lookupDescriptor(valueAnnotation.value.type).toString());
           if (innerVisitor != null) {
             writeAnnotation(innerVisitor, valueAnnotation.value);
             innerVisitor.visitEnd();
@@ -587,8 +586,8 @@
         DexField enumField = value.asDexValueEnum().getValue();
         visitor.visitEnum(
             name,
-            namingLens.lookupDescriptor(enumField.getType()).toString(),
-            namingLens.lookupName(enumField).toString());
+            getNamingLens().lookupDescriptor(enumField.getType()).toString(),
+            getNamingLens().lookupName(enumField).toString());
         break;
 
       case FIELD:
@@ -610,7 +609,8 @@
       case TYPE:
         visitor.visit(
             name,
-            Type.getType(namingLens.lookupDescriptor(value.asDexValueType().value).toString()));
+            Type.getType(
+                getNamingLens().lookupDescriptor(value.asDexValueType().value).toString()));
         break;
 
       default:
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationArgumentInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationArgumentInfo.java
index 6f34ad1..7d9fd7f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationArgumentInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationArgumentInfo.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.kotlin.Kotlin.ClassClassifiers;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -28,8 +27,7 @@
   private static final Map<String, KotlinAnnotationArgumentInfo> EMPTY_ARGUMENTS =
       ImmutableMap.of();
 
-  abstract boolean rewrite(
-      Consumer<KmAnnotationArgument> consumer, AppView<?> appView, NamingLens namingLens);
+  abstract boolean rewrite(Consumer<KmAnnotationArgument> consumer, AppView<?> appView);
 
   private static KotlinAnnotationArgumentInfo createArgument(
       KmAnnotationArgument arg, DexItemFactory factory) {
@@ -78,12 +76,10 @@
     }
 
     @Override
-    boolean rewrite(
-        Consumer<KmAnnotationArgument> consumer, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(Consumer<KmAnnotationArgument> consumer, AppView<?> appView) {
       return value.toRenamedBinaryNameOrDefault(
           rewrittenValue -> consumer.accept(new KClassValue(rewrittenValue, arrayDimensionCount)),
           appView,
-          namingLens,
           ClassClassifiers.anyName);
     }
   }
@@ -111,13 +107,11 @@
     }
 
     @Override
-    boolean rewrite(
-        Consumer<KmAnnotationArgument> consumer, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(Consumer<KmAnnotationArgument> consumer, AppView<?> appView) {
       return enumClassName.toRenamedBinaryNameOrDefault(
           rewrittenEnumClassName ->
               consumer.accept(new EnumValue(rewrittenEnumClassName, enumEntryName)),
           appView,
-          namingLens,
           ClassClassifiers.anyName);
     }
   }
@@ -142,16 +136,14 @@
     }
 
     @Override
-    boolean rewrite(
-        Consumer<KmAnnotationArgument> consumer, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(Consumer<KmAnnotationArgument> consumer, AppView<?> appView) {
       return value.rewrite(
           rewrittenAnnotation -> {
             if (rewrittenAnnotation != null) {
               consumer.accept(new AnnotationValue(rewrittenAnnotation));
             }
           },
-          appView,
-          namingLens);
+          appView);
     }
   }
 
@@ -185,8 +177,7 @@
     }
 
     @Override
-    boolean rewrite(
-        Consumer<KmAnnotationArgument> consumer, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(Consumer<KmAnnotationArgument> consumer, AppView<?> appView) {
       List<KmAnnotationArgument> rewrittenArguments = new ArrayList<>();
       boolean rewritten = false;
       for (KotlinAnnotationArgumentInfo kotlinAnnotationArgumentInfo : value) {
@@ -197,8 +188,7 @@
                     rewrittenArguments.add(rewrittenArg);
                   }
                 },
-                appView,
-                namingLens);
+                appView);
       }
       consumer.accept(new ArrayValue(rewrittenArguments));
       return rewritten;
@@ -223,8 +213,7 @@
     }
 
     @Override
-    boolean rewrite(
-        Consumer<KmAnnotationArgument> consumer, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(Consumer<KmAnnotationArgument> consumer, AppView<?> appView) {
       consumer.accept(argument);
       return false;
     }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationInfo.java
index d21cfb1..249f68f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinAnnotationInfo.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.BooleanBox;
 import com.android.tools.r8.utils.DescriptorUtils;
@@ -51,9 +50,7 @@
   }
 
   boolean rewrite(
-      KmVisitorProviders.KmAnnotationVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      KmVisitorProviders.KmAnnotationVisitorProvider visitorProvider, AppView<?> appView) {
     BooleanBox rewritten = new BooleanBox(false);
     rewritten.or(
         annotationType.toRenamedDescriptorOrDefault(
@@ -74,12 +71,10 @@
                                   rewrittenArguments.put(key, rewrittenArg);
                                 }
                               },
-                              appView,
-                              namingLens)));
+                              appView)));
               visitorProvider.get(new KmAnnotation(classifier, rewrittenArguments));
             },
             appView,
-            namingLens,
             null));
     return rewritten.get();
   }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
index bd8696b..9ddddfe 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexString;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.Pair;
@@ -255,14 +254,13 @@
   }
 
   @Override
-  public Pair<KotlinClassHeader, Boolean> rewrite(
-      DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+  public Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
     KmClass kmClass = new KmClass();
     // TODO(b/154348683): Set flags.
     kmClass.setFlags(flags);
     // Set potentially renamed class name.
     DexString originalDescriptor = clazz.type.descriptor;
-    DexString rewrittenDescriptor = namingLens.lookupDescriptor(clazz.type);
+    DexString rewrittenDescriptor = appView.getNamingLens().lookupDescriptor(clazz.type);
     boolean rewritten = !originalDescriptor.equals(rewrittenDescriptor);
     if (!nameCanBeSynthesizedFromClassOrAnonymousObjectOrigin) {
       kmClass.setName(this.name);
@@ -273,8 +271,7 @@
       if (anonymousObjectOrigin != null
           && name.equals(anonymousObjectOrigin.toKotlinClassifier(true))) {
         Box<String> rewrittenOrigin = new Box<>();
-        anonymousObjectOrigin.toRenamedBinaryNameOrDefault(
-            rewrittenOrigin::set, appView, namingLens, null);
+        anonymousObjectOrigin.toRenamedBinaryNameOrDefault(rewrittenOrigin::set, appView, null);
         if (rewrittenOrigin.isSet()) {
           rewrittenName = "." + rewrittenOrigin.get();
         }
@@ -290,19 +287,22 @@
     for (DexEncodedField field : clazz.fields()) {
       if (field.getKotlinInfo().isCompanion()) {
         rewritten |=
-            field.getKotlinInfo().asCompanion().rewrite(kmClass, field.getReference(), namingLens);
+            field
+                .getKotlinInfo()
+                .asCompanion()
+                .rewrite(kmClass, field.getReference(), appView.getNamingLens());
       }
     }
     // Take all not backed constructors because we will never find them in definitions.
     for (KotlinConstructorInfo constructorInfo : constructorsWithNoBacking) {
-      rewritten |= constructorInfo.rewrite(kmClass, null, appView, namingLens);
+      rewritten |= constructorInfo.rewrite(kmClass, null, appView);
     }
     // Find all constructors.
     KotlinMetadataMembersTracker rewrittenReferences = new KotlinMetadataMembersTracker(appView);
     for (DexEncodedMethod method : clazz.methods()) {
       if (method.getKotlinInfo().isConstructor()) {
         KotlinConstructorInfo constructorInfo = method.getKotlinInfo().asConstructor();
-        rewritten |= constructorInfo.rewrite(kmClass, method, appView, namingLens);
+        rewritten |= constructorInfo.rewrite(kmClass, method, appView);
         rewrittenReferences.add(method.getReference());
       }
     }
@@ -314,17 +314,16 @@
             kmClass::visitTypeAlias,
             clazz,
             appView,
-            namingLens,
             rewrittenReferences);
     // Rewrite type parameters.
     for (KotlinTypeParameterInfo typeParameter : typeParameters) {
-      rewritten |= typeParameter.rewrite(kmClass::visitTypeParameter, appView, namingLens);
+      rewritten |= typeParameter.rewrite(kmClass::visitTypeParameter, appView);
     }
     // Rewrite super types.
     for (KotlinTypeInfo superType : superTypes) {
       // Ensure the rewritten super type is not this type.
       if (clazz.getType() != superType.rewriteType(appView.graphLens())) {
-        rewritten |= superType.rewrite(kmClass::visitSupertype, appView, namingLens);
+        rewritten |= superType.rewrite(kmClass::visitSupertype, appView);
       } else {
         rewritten = true;
       }
@@ -333,8 +332,7 @@
     for (KotlinTypeReference nestedClass : nestedClasses) {
       Box<String> nestedDescriptorBox = new Box<>();
       boolean nestedClassRewritten =
-          nestedClass.toRenamedBinaryNameOrDefault(
-              nestedDescriptorBox::set, appView, namingLens, null);
+          nestedClass.toRenamedBinaryNameOrDefault(nestedDescriptorBox::set, appView, null);
       if (nestedDescriptorBox.isSet()) {
         if (nestedClassRewritten) {
           // If the class is a nested class, it should be on the form Foo.Bar$Baz, where Baz
@@ -361,7 +359,6 @@
                 }
               },
               appView,
-              namingLens,
               null);
     }
     // TODO(b/154347404): Understand enum entries.
@@ -370,8 +367,7 @@
     if (inlineClassUnderlyingPropertyName != null && inlineClassUnderlyingType != null) {
       kmClass.setInlineClassUnderlyingPropertyName(inlineClassUnderlyingPropertyName);
       rewritten |=
-          inlineClassUnderlyingType.rewrite(
-              kmClass::visitInlineClassUnderlyingType, appView, namingLens);
+          inlineClassUnderlyingType.rewrite(kmClass::visitInlineClassUnderlyingType, appView);
     }
     JvmClassExtensionVisitor extensionVisitor =
         (JvmClassExtensionVisitor) kmClass.visitExtensions(JvmClassExtensionVisitor.TYPE);
@@ -386,12 +382,10 @@
                 }
               },
               appView,
-              namingLens,
               null);
     }
     rewritten |=
-        localDelegatedProperties.rewrite(
-            extensionVisitor::visitLocalDelegatedProperty, appView, namingLens);
+        localDelegatedProperties.rewrite(extensionVisitor::visitLocalDelegatedProperty, appView);
     extensionVisitor.visitEnd();
     KotlinClassMetadata.Class.Writer writer = new KotlinClassMetadata.Class.Writer();
     kmClass.accept(writer);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassLevelInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassLevelInfo.java
index 34c60de..e8f7fd0 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassLevelInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassLevelInfo.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Pair;
 import kotlinx.metadata.jvm.KotlinClassHeader;
@@ -57,8 +56,7 @@
     return null;
   }
 
-  Pair<KotlinClassHeader, Boolean> rewrite(
-      DexClass clazz, AppView<?> appView, NamingLens namingLens);
+  Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView);
 
   String getPackageName();
 
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java
index 9b2939e..b6ee8e3 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.kotlin.Kotlin.ClassClassifiers;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.Reporter;
@@ -50,7 +49,7 @@
     }
   }
 
-  abstract boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens);
+  abstract boolean rewrite(KmTypeVisitor visitor, AppView<?> appView);
 
   public DexType rewriteType(GraphLens graphLens) {
     return null;
@@ -67,14 +66,12 @@
     }
 
     @Override
-    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView) {
       return type.toRenamedDescriptorOrDefault(
-          descriptor -> {
-            visitor.visitClass(
-                getKotlinLocalOrAnonymousNameFromDescriptor(descriptor, isLocalOrAnonymous));
-          },
+          descriptor ->
+              visitor.visitClass(
+                  getKotlinLocalOrAnonymousNameFromDescriptor(descriptor, isLocalOrAnonymous)),
           appView,
-          namingLens,
           ClassClassifiers.anyDescriptor);
     }
 
@@ -98,7 +95,7 @@
     }
 
     @Override
-    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView) {
       visitor.visitTypeParameter(typeId);
       return false;
     }
@@ -118,7 +115,7 @@
     }
 
     @Override
-    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView) {
       visitor.visitTypeAlias(typeAlias);
       return false;
     }
@@ -137,7 +134,7 @@
     }
 
     @Override
-    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView) {
       visitor.visitClass(classifier);
       return false;
     }
@@ -156,7 +153,7 @@
     }
 
     @Override
-    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens) {
+    boolean rewrite(KmTypeVisitor visitor, AppView<?> appView) {
       visitor.visitTypeAlias(classifier);
       return false;
     }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
index dd82d58..4c93733 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Reporter;
 import java.util.List;
 import kotlinx.metadata.KmClass;
@@ -55,8 +54,7 @@
             : null);
   }
 
-  boolean rewrite(
-      KmClass kmClass, DexEncodedMethod method, AppView<?> appView, NamingLens namingLens) {
+  boolean rewrite(KmClass kmClass, DexEncodedMethod method, AppView<?> appView) {
     // Note that JvmExtensionsKt.setSignature does not have an overload for KmConstructorVisitor,
     // thus we rely on creating the KmConstructor manually.
     // TODO(b/154348683): Check for special flags to pass in.
@@ -67,12 +65,10 @@
           signature.rewrite(
               rewrittenSignature -> JvmExtensionsKt.setSignature(kmConstructor, rewrittenSignature),
               method,
-              appView,
-              namingLens);
+              appView);
     }
     for (KotlinValueParameterInfo valueParameterInfo : valueParameters) {
-      rewritten |=
-          valueParameterInfo.rewrite(kmConstructor::visitValueParameter, appView, namingLens);
+      rewritten |= valueParameterInfo.rewrite(kmConstructor::visitValueParameter, appView);
     }
     rewritten |= versionRequirements.rewrite(kmConstructor::visitVersionRequirement);
     kmClass.getConstructors().add(kmConstructor);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinContractInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinContractInfo.java
index 2afb66e..c437bba 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinContractInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinContractInfo.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import com.google.common.collect.ImmutableList;
@@ -50,16 +49,14 @@
   }
 
   boolean rewrite(
-      KmVisitorProviders.KmContractVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      KmVisitorProviders.KmContractVisitorProvider visitorProvider, AppView<?> appView) {
     if (this == NO_EFFECT) {
       return false;
     }
     boolean rewritten = false;
     KmContractVisitor kmContractVisitor = visitorProvider.get();
     for (KotlinEffectInfo effect : effects) {
-      rewritten |= effect.rewrite(kmContractVisitor::visitEffect, appView, namingLens);
+      rewritten |= effect.rewrite(kmContractVisitor::visitEffect, appView);
     }
     kmContractVisitor.visitEnd();
     return rewritten;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
index 5022d48..9307053 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.kotlin.KotlinMetadataUtils.KmPropertyProcessor;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import com.google.common.collect.ImmutableList;
@@ -185,12 +184,11 @@
       KmVisitorProviders.KmTypeAliasVisitorProvider typeAliasProvider,
       DexClass clazz,
       AppView<?> appView,
-      NamingLens namingLens,
       KotlinMetadataMembersTracker rewrittenMembersWithKotlinInfo) {
     // Type aliases only have a representation here, so we can generate them directly.
     boolean rewritten = false;
     for (KotlinTypeAliasInfo typeAlias : typeAliases) {
-      rewritten |= typeAlias.rewrite(typeAliasProvider, appView, namingLens);
+      rewritten |= typeAlias.rewrite(typeAliasProvider, appView);
     }
     // For properties, we need to combine potentially a field, setter and getter.
     Map<KotlinPropertyInfo, KotlinPropertyGroup> properties = new LinkedHashMap<>();
@@ -205,11 +203,7 @@
     }
     for (DexEncodedMethod method : clazz.methods()) {
       if (method.getKotlinInfo().isFunction()) {
-        rewritten |=
-            method
-                .getKotlinInfo()
-                .asFunction()
-                .rewrite(functionProvider, method, appView, namingLens);
+        rewritten |= method.getKotlinInfo().asFunction().rewrite(functionProvider, method, appView);
         rewrittenMembersWithKotlinInfo.add(method.getReference());
         continue;
       }
@@ -235,16 +229,14 @@
               kotlinPropertyGroup.backingField,
               kotlinPropertyGroup.getter,
               kotlinPropertyGroup.setter,
-              appView,
-              namingLens);
+              appView);
     }
     // Add all not backed functions and properties.
     for (KotlinFunctionInfo notBackedFunction : functionsWithNoBacking) {
-      rewritten |= notBackedFunction.rewrite(functionProvider, null, appView, namingLens);
+      rewritten |= notBackedFunction.rewrite(functionProvider, null, appView);
     }
     for (KotlinPropertyInfo notBackedProperty : propertiesWithNoBacking) {
-      rewritten |=
-          notBackedProperty.rewrite(propertyProvider, null, null, null, appView, namingLens);
+      rewritten |= notBackedProperty.rewrite(propertyProvider, null, null, null, appView);
     }
     return rewritten;
   }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinEffectExpressionInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinEffectExpressionInfo.java
index bc7cda0..18afe26 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinEffectExpressionInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinEffectExpressionInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.kotlin.KmVisitorProviders.KmEffectExpressionVisitorProvider;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import com.google.common.collect.ImmutableList;
@@ -85,8 +84,7 @@
     forEachApply(orArguments, arg -> arg::trace, definitionSupplier);
   }
 
-  boolean rewrite(
-      KmEffectExpressionVisitorProvider provider, AppView<?> appView, NamingLens namingLens) {
+  boolean rewrite(KmEffectExpressionVisitorProvider provider, AppView<?> appView) {
     if (this == NO_EXPRESSION) {
       return false;
     }
@@ -97,13 +95,13 @@
     }
     boolean rewritten = false;
     if (isInstanceType != null) {
-      rewritten |= isInstanceType.rewrite(visitor::visitIsInstanceType, appView, namingLens);
+      rewritten |= isInstanceType.rewrite(visitor::visitIsInstanceType, appView);
     }
     for (KotlinEffectExpressionInfo andArgument : andArguments) {
-      rewritten |= andArgument.rewrite(visitor::visitAndArgument, appView, namingLens);
+      rewritten |= andArgument.rewrite(visitor::visitAndArgument, appView);
     }
     for (KotlinEffectExpressionInfo orArgument : orArguments) {
-      rewritten |= orArgument.rewrite(visitor::visitAndArgument, appView, namingLens);
+      rewritten |= orArgument.rewrite(visitor::visitAndArgument, appView);
     }
     visitor.visitEnd();
     return rewritten;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinEffectInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinEffectInfo.java
index e581526..e93b126 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinEffectInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinEffectInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.kotlin.KmVisitorProviders.KmEffectVisitorProvider;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import java.util.List;
@@ -51,16 +50,12 @@
     conclusion.trace(definitionSupplier);
   }
 
-  boolean rewrite(
-      KmEffectVisitorProvider visitorProvider, AppView<?> appView, NamingLens namingLens) {
+  boolean rewrite(KmEffectVisitorProvider visitorProvider, AppView<?> appView) {
     KmEffectVisitor kmEffectVisitor = visitorProvider.get(type, invocationKind);
     boolean rewritten =
-        conclusion.rewrite(
-            kmEffectVisitor::visitConclusionOfConditionalEffect, appView, namingLens);
+        conclusion.rewrite(kmEffectVisitor::visitConclusionOfConditionalEffect, appView);
     for (KotlinEffectExpressionInfo constructorArgument : constructorArguments) {
-      rewritten |=
-          constructorArgument.rewrite(
-              kmEffectVisitor::visitConstructorArgument, appView, namingLens);
+      rewritten |= constructorArgument.rewrite(kmEffectVisitor::visitConstructorArgument, appView);
     }
     kmEffectVisitor.visitEnd();
     return rewritten;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
index 7981195..f112b4f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Pair;
 import java.util.function.Consumer;
 import kotlinx.metadata.KmPackage;
@@ -58,10 +57,9 @@
   }
 
   @Override
-  public Pair<KotlinClassHeader, Boolean> rewrite(
-      DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+  public Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
     KmPackage kmPackage = new KmPackage();
-    boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView, namingLens);
+    boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView);
     KotlinClassMetadata.FileFacade.Writer writer = new KotlinClassMetadata.FileFacade.Writer();
     kmPackage.accept(writer);
     return Pair.create(writer.write().getHeader(), rewritten);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFlexibleTypeUpperBoundInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFlexibleTypeUpperBoundInfo.java
index e2a2083..35e52f5 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFlexibleTypeUpperBoundInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFlexibleTypeUpperBoundInfo.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import kotlinx.metadata.KmFlexibleTypeUpperBound;
@@ -39,9 +38,7 @@
   }
 
   boolean rewrite(
-      KmVisitorProviders.KmFlexibleUpperBoundVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      KmVisitorProviders.KmFlexibleUpperBoundVisitorProvider visitorProvider, AppView<?> appView) {
     if (this == NO_FLEXIBLE_UPPER_BOUND) {
       // Nothing to do.
       return false;
@@ -50,8 +47,7 @@
       assert false;
       return false;
     }
-    return kotlinTypeInfo.rewrite(
-        flags -> visitorProvider.get(flags, typeFlexibilityId), appView, namingLens);
+    return kotlinTypeInfo.rewrite(flags -> visitorProvider.get(flags, typeFlexibilityId), appView);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
index 5001c40..63e7c95 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Reporter;
 import java.util.List;
 import kotlinx.metadata.KmFunction;
@@ -119,14 +118,13 @@
   boolean rewrite(
       KmVisitorProviders.KmFunctionVisitorProvider visitorProvider,
       DexEncodedMethod method,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      AppView<?> appView) {
     // TODO(b/154348683): Check method for flags to pass in.
     boolean rewritten = false;
     String finalName = this.name;
     if (method != null) {
       String methodName = method.getReference().name.toString();
-      String rewrittenName = namingLens.lookupName(method.getReference()).toString();
+      String rewrittenName = appView.getNamingLens().lookupName(method.getReference()).toString();
       if (!methodName.equals(rewrittenName)) {
         rewritten = true;
         finalName = rewrittenName;
@@ -134,23 +132,21 @@
     }
     KmFunctionVisitor kmFunction = visitorProvider.get(flags, finalName);
     // TODO(b/154348149): ReturnType could have been merged to a subtype.
-    rewritten |= returnType.rewrite(kmFunction::visitReturnType, appView, namingLens);
+    rewritten |= returnType.rewrite(kmFunction::visitReturnType, appView);
     for (KotlinValueParameterInfo valueParameterInfo : valueParameters) {
-      rewritten |= valueParameterInfo.rewrite(kmFunction::visitValueParameter, appView, namingLens);
+      rewritten |= valueParameterInfo.rewrite(kmFunction::visitValueParameter, appView);
     }
     for (KotlinTypeParameterInfo typeParameterInfo : typeParameters) {
-      rewritten |= typeParameterInfo.rewrite(kmFunction::visitTypeParameter, appView, namingLens);
+      rewritten |= typeParameterInfo.rewrite(kmFunction::visitTypeParameter, appView);
     }
     if (receiverParameterType != null) {
-      rewritten |=
-          receiverParameterType.rewrite(
-              kmFunction::visitReceiverParameterType, appView, namingLens);
+      rewritten |= receiverParameterType.rewrite(kmFunction::visitReceiverParameterType, appView);
     }
     rewritten |= versionRequirements.rewrite(kmFunction::visitVersionRequirement);
     JvmFunctionExtensionVisitor extensionVisitor =
         (JvmFunctionExtensionVisitor) kmFunction.visitExtensions(JvmFunctionExtensionVisitor.TYPE);
     if (signature != null && extensionVisitor != null) {
-      rewritten |= signature.rewrite(extensionVisitor::visit, method, appView, namingLens);
+      rewritten |= signature.rewrite(extensionVisitor::visit, method, appView);
     }
     if (lambdaClassOrigin != null && extensionVisitor != null) {
       rewritten |=
@@ -161,10 +157,9 @@
                 }
               },
               appView,
-              namingLens,
               null);
     }
-    rewritten |= contract.rewrite(kmFunction::visitContract, appView, namingLens);
+    rewritten |= contract.rewrite(kmFunction::visitContract, appView);
     return rewritten;
   }
 
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java
index 340275a..a7a8f78 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Box;
 import java.util.function.Consumer;
@@ -38,16 +37,12 @@
         KotlinTypeReference.fromDescriptor(fieldSignature.getDesc(), factory));
   }
 
-  boolean rewrite(
-      Consumer<JvmFieldSignature> consumer,
-      DexEncodedField field,
-      AppView<?> appView,
-      NamingLens namingLens) {
+  boolean rewrite(Consumer<JvmFieldSignature> consumer, DexEncodedField field, AppView<?> appView) {
     boolean rewritten = false;
     String finalName = name;
     if (field != null) {
       String fieldName = field.getReference().name.toString();
-      String rewrittenName = namingLens.lookupName(field.getReference()).toString();
+      String rewrittenName = appView.getNamingLens().lookupName(field.getReference()).toString();
       if (!fieldName.equals(rewrittenName)) {
         rewritten = true;
         finalName = rewrittenName;
@@ -55,8 +50,7 @@
     }
     String defValue = appView.dexItemFactory().objectType.toDescriptorString();
     Box<String> renamedDescriptor = new Box<>();
-    rewritten |=
-        type.toRenamedDescriptorOrDefault(renamedDescriptor::set, appView, namingLens, defValue);
+    rewritten |= type.toRenamedDescriptorOrDefault(renamedDescriptor::set, appView, defValue);
     consumer.accept(new JvmFieldSignature(finalName, renamedDescriptor.get()));
     return rewritten;
   }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java
index 5cfa5ac..2760ece 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.google.common.collect.ImmutableList;
@@ -72,10 +71,7 @@
   }
 
   boolean rewrite(
-      Consumer<JvmMethodSignature> consumer,
-      DexEncodedMethod method,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      Consumer<JvmMethodSignature> consumer, DexEncodedMethod method, AppView<?> appView) {
     if (invalidDescriptor != null) {
       consumer.accept(new JvmMethodSignature(name, invalidDescriptor));
       return false;
@@ -85,7 +81,7 @@
     boolean rewritten = false;
     if (method != null) {
       String methodName = method.getReference().name.toString();
-      String rewrittenName = namingLens.lookupName(method.getReference()).toString();
+      String rewrittenName = appView.getNamingLens().lookupName(method.getReference()).toString();
       if (!methodName.equals(rewrittenName)) {
         finalName = rewrittenName;
         rewritten = true;
@@ -95,13 +91,10 @@
     descBuilder.append("(");
     String defValue = appView.dexItemFactory().objectType.toDescriptorString();
     for (KotlinTypeReference parameter : parameters) {
-      rewritten |=
-          parameter.toRenamedDescriptorOrDefault(
-              descBuilder::append, appView, namingLens, defValue);
+      rewritten |= parameter.toRenamedDescriptorOrDefault(descBuilder::append, appView, defValue);
     }
     descBuilder.append(")");
-    rewritten |=
-        returnType.toRenamedDescriptorOrDefault(descBuilder::append, appView, namingLens, defValue);
+    rewritten |= returnType.toRenamedDescriptorOrDefault(descBuilder::append, appView, defValue);
     consumer.accept(new JvmMethodSignature(finalName, descBuilder.toString()));
     return rewritten;
   }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
index b9e4f84..ffe08b4 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import kotlinx.metadata.KmLambda;
@@ -60,10 +59,9 @@
   boolean rewrite(
       KmVisitorProviders.KmLambdaVisitorProvider visitorProvider,
       DexClass clazz,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      AppView<?> appView) {
     if (!hasBacking) {
-      function.rewrite(visitorProvider.get()::visitFunction, null, appView, namingLens);
+      function.rewrite(visitorProvider.get()::visitFunction, null, appView);
       return true;
     }
     DexEncodedMethod backing = null;
@@ -73,7 +71,7 @@
         break;
       }
     }
-    return function.rewrite(visitorProvider.get()::visitFunction, backing, appView, namingLens);
+    return function.rewrite(visitorProvider.get()::visitFunction, backing, appView);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinLocalDelegatedPropertyInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinLocalDelegatedPropertyInfo.java
index 9548bde..4bdce09 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinLocalDelegatedPropertyInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinLocalDelegatedPropertyInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.kotlin.KmVisitorProviders.KmPropertyVisitorProvider;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import com.google.common.collect.ImmutableList;
@@ -52,11 +51,10 @@
     forEachApply(propertyInfos, prop -> prop::trace, definitionSupplier);
   }
 
-  boolean rewrite(
-      KmPropertyVisitorProvider visitorProvider, AppView<?> appView, NamingLens namingLens) {
+  boolean rewrite(KmPropertyVisitorProvider visitorProvider, AppView<?> appView) {
     boolean rewritten = false;
     for (KotlinPropertyInfo propertyInfo : propertyInfos) {
-      rewritten |= propertyInfo.rewrite(visitorProvider, null, null, null, appView, namingLens);
+      rewritten |= propertyInfo.rewrite(visitorProvider, null, null, null, appView);
     }
     return rewritten;
   }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
index fb6575c..5353319 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
@@ -20,7 +20,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.naming.NamingLens;
 import com.android.tools.r8.utils.ConsumerUtils;
 import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.ThreadUtils;
@@ -71,13 +70,11 @@
   }
 
   private final AppView<?> appView;
-  private final NamingLens lens;
   private final DexItemFactory factory;
   private final Kotlin kotlin;
 
-  public KotlinMetadataRewriter(AppView<?> appView, NamingLens lens) {
+  public KotlinMetadataRewriter(AppView<?> appView) {
     this.appView = appView;
-    this.lens = lens;
     this.factory = appView.dexItemFactory();
     this.kotlin = factory.kotlin;
   }
@@ -130,7 +127,7 @@
   }
 
   public void runForD8(ExecutorService executorService) throws ExecutionException {
-    if (lens.isIdentityLens()) {
+    if (appView.getNamingLens().isIdentityLens()) {
       return;
     }
     final WriteMetadataFieldInfo writeMetadataFieldInfo = WriteMetadataFieldInfo.rewriteAll();
@@ -158,7 +155,7 @@
       DexAnnotation oldMeta,
       WriteMetadataFieldInfo writeMetadataFieldInfo) {
     try {
-      Pair<KotlinClassHeader, Boolean> kotlinClassHeader = kotlinInfo.rewrite(clazz, appView, lens);
+      Pair<KotlinClassHeader, Boolean> kotlinClassHeader = kotlinInfo.rewrite(clazz, appView);
       // TODO(b/185756596): Remove when special handling is no longer needed.
       if (!kotlinClassHeader.getSecond()
           && appView.options().testing.keepMetadataInR8IfNotRewritten) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
index 1d927fe..d5884f5 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
@@ -14,7 +14,6 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.InnerClassAttribute;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.ProguardConfiguration;
 import com.android.tools.r8.shaking.ProguardConfigurationRule;
 import com.android.tools.r8.shaking.ProguardKeepRule;
@@ -51,8 +50,7 @@
     }
 
     @Override
-    public Pair<KotlinClassHeader, Boolean> rewrite(
-        DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+    public Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
       throw new Unreachable("Should never be called");
     }
 
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
index 0545b20..2a89998 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Pair;
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
@@ -56,8 +55,7 @@
   }
 
   @Override
-  public Pair<KotlinClassHeader, Boolean> rewrite(
-      DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+  public Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
     List<String> partClassNameStrings = new ArrayList<>(partClassNames.size());
     boolean rewritten = false;
     for (KotlinTypeReference partClassName : partClassNames) {
@@ -69,7 +67,6 @@
                 }
               },
               appView,
-              namingLens,
               null);
     }
     KotlinClassMetadata.MultiFileClassFacade.Writer writer =
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
index 24cb385..6c96b8d 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Pair;
 import java.util.function.Consumer;
 import kotlinx.metadata.KmPackage;
@@ -65,10 +64,9 @@
   }
 
   @Override
-  public Pair<KotlinClassHeader, Boolean> rewrite(
-      DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+  public Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
     KmPackage kmPackage = new KmPackage();
-    boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView, namingLens);
+    boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView);
     KotlinClassMetadata.MultiFileClassPart.Writer writer =
         new KotlinClassMetadata.MultiFileClassPart.Writer();
     kmPackage.accept(writer);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
index fa483ae..f1e2573 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import java.util.HashMap;
 import java.util.Map;
@@ -74,7 +73,7 @@
         originalMembersWithKotlinInfo);
   }
 
-  boolean rewrite(KmPackage kmPackage, DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+  boolean rewrite(KmPackage kmPackage, DexClass clazz, AppView<?> appView) {
     KotlinMetadataMembersTracker rewrittenReferences = new KotlinMetadataMembersTracker(appView);
     boolean rewritten =
         containerInfo.rewrite(
@@ -83,13 +82,11 @@
             kmPackage::visitTypeAlias,
             clazz,
             appView,
-            namingLens,
             rewrittenReferences);
     JvmPackageExtensionVisitor extensionVisitor =
         (JvmPackageExtensionVisitor) kmPackage.visitExtensions(JvmPackageExtensionVisitor.TYPE);
     rewritten |=
-        localDelegatedProperties.rewrite(
-            extensionVisitor::visitLocalDelegatedProperty, appView, namingLens);
+        localDelegatedProperties.rewrite(extensionVisitor::visitLocalDelegatedProperty, appView);
     extensionVisitor.visitModuleName(moduleName);
     extensionVisitor.visitEnd();
     return rewritten || !originalMembersWithKotlinInfo.isEqual(rewrittenReferences, appView);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java
index 39ab90c..6d10139 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.Reporter;
 import java.util.List;
@@ -144,25 +143,22 @@
       DexEncodedField field,
       DexEncodedMethod getter,
       DexEncodedMethod setter,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      AppView<?> appView) {
     // TODO(b/154348683): Flags again.
     KmPropertyVisitor kmProperty = visitorProvider.get(flags, name, getterFlags, setterFlags);
     // TODO(b/154348149): ReturnType could have been merged to a subtype.
     boolean rewritten = false;
     if (returnType != null) {
-      rewritten = returnType.rewrite(kmProperty::visitReturnType, appView, namingLens);
+      rewritten = returnType.rewrite(kmProperty::visitReturnType, appView);
     }
     if (receiverParameterType != null) {
-      rewritten |=
-          receiverParameterType.rewrite(
-              kmProperty::visitReceiverParameterType, appView, namingLens);
+      rewritten |= receiverParameterType.rewrite(kmProperty::visitReceiverParameterType, appView);
     }
     if (setterParameter != null) {
-      rewritten |= setterParameter.rewrite(kmProperty::visitSetterParameter, appView, namingLens);
+      rewritten |= setterParameter.rewrite(kmProperty::visitSetterParameter, appView);
     }
     for (KotlinTypeParameterInfo typeParameter : typeParameters) {
-      rewritten |= typeParameter.rewrite(kmProperty::visitTypeParameter, appView, namingLens);
+      rewritten |= typeParameter.rewrite(kmProperty::visitTypeParameter, appView);
     }
     rewritten |= versionRequirements.rewrite(kmProperty::visitVersionRequirement);
     JvmPropertyExtensionVisitor extensionVisitor =
@@ -170,18 +166,15 @@
     if (extensionVisitor != null) {
       Box<JvmFieldSignature> rewrittenFieldSignature = new Box<>();
       if (fieldSignature != null) {
-        rewritten |=
-            fieldSignature.rewrite(rewrittenFieldSignature::set, field, appView, namingLens);
+        rewritten |= fieldSignature.rewrite(rewrittenFieldSignature::set, field, appView);
       }
       Box<JvmMethodSignature> rewrittenGetterSignature = new Box<>();
       if (getterSignature != null) {
-        rewritten |=
-            getterSignature.rewrite(rewrittenGetterSignature::set, getter, appView, namingLens);
+        rewritten |= getterSignature.rewrite(rewrittenGetterSignature::set, getter, appView);
       }
       Box<JvmMethodSignature> rewrittenSetterSignature = new Box<>();
       if (setterSignature != null) {
-        rewritten |=
-            setterSignature.rewrite(rewrittenSetterSignature::set, setter, appView, namingLens);
+        rewritten |= setterSignature.rewrite(rewrittenSetterSignature::set, setter, appView);
       }
       extensionVisitor.visit(
           jvmFlags,
@@ -191,12 +184,12 @@
       if (syntheticMethodForAnnotations != null) {
         rewritten |=
             syntheticMethodForAnnotations.rewrite(
-                extensionVisitor::visitSyntheticMethodForAnnotations, null, appView, namingLens);
+                extensionVisitor::visitSyntheticMethodForAnnotations, null, appView);
       }
       if (syntheticMethodForDelegate != null) {
         rewritten |=
             syntheticMethodForDelegate.rewrite(
-                extensionVisitor::visitSyntheticMethodForDelegate, null, appView, namingLens);
+                extensionVisitor::visitSyntheticMethodForDelegate, null, appView);
       }
     }
     return rewritten;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
index ee55f8b..fb9b55f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.Pair;
 import kotlinx.metadata.KmLambda;
 import kotlinx.metadata.jvm.KotlinClassHeader;
@@ -74,13 +73,12 @@
   }
 
   @Override
-  public Pair<KotlinClassHeader, Boolean> rewrite(
-      DexClass clazz, AppView<?> appView, NamingLens namingLens) {
+  public Pair<KotlinClassHeader, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
     Writer writer = new Writer();
     boolean rewritten = false;
     if (lambda != null) {
       KmLambda kmLambda = new KmLambda();
-      rewritten = lambda.rewrite(() -> kmLambda, clazz, appView, namingLens);
+      rewritten = lambda.rewrite(() -> kmLambda, clazz, appView);
       kmLambda.accept(writer);
     }
     return Pair.create(writer.write().getHeader(), rewritten);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeAliasInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeAliasInfo.java
index c4e307b..8f89b9e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeAliasInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeAliasInfo.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import java.util.List;
@@ -59,19 +58,15 @@
   }
 
   boolean rewrite(
-      KmVisitorProviders.KmTypeAliasVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      KmVisitorProviders.KmTypeAliasVisitorProvider visitorProvider, AppView<?> appView) {
     KmTypeAliasVisitor kmTypeAliasVisitor = visitorProvider.get(flags, name);
-    boolean rewritten =
-        underlyingType.rewrite(kmTypeAliasVisitor::visitUnderlyingType, appView, namingLens);
-    rewritten |= expandedType.rewrite(kmTypeAliasVisitor::visitExpandedType, appView, namingLens);
+    boolean rewritten = underlyingType.rewrite(kmTypeAliasVisitor::visitUnderlyingType, appView);
+    rewritten |= expandedType.rewrite(kmTypeAliasVisitor::visitExpandedType, appView);
     for (KotlinTypeParameterInfo typeParameter : typeParameters) {
-      rewritten |=
-          typeParameter.rewrite(kmTypeAliasVisitor::visitTypeParameter, appView, namingLens);
+      rewritten |= typeParameter.rewrite(kmTypeAliasVisitor::visitTypeParameter, appView);
     }
     for (KotlinAnnotationInfo annotation : annotations) {
-      rewritten |= annotation.rewrite(kmTypeAliasVisitor::visitAnnotation, appView, namingLens);
+      rewritten |= annotation.rewrite(kmTypeAliasVisitor::visitAnnotation, appView);
     }
     rewritten |= versionRequirements.rewrite(kmTypeAliasVisitor::visitVersionRequirement);
     return rewritten;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeInfo.java
index 6127754..e83cff6 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeInfo.java
@@ -83,31 +83,24 @@
     return arguments.build();
   }
 
-  boolean rewrite(
-      KmVisitorProviders.KmTypeVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+  boolean rewrite(KmVisitorProviders.KmTypeVisitorProvider visitorProvider, AppView<?> appView) {
     // TODO(b/154348683): Check for correct flags
     KmTypeVisitor kmTypeVisitor = visitorProvider.get(flags);
-    boolean rewritten = classifier.rewrite(kmTypeVisitor, appView, namingLens);
+    NamingLens namingLens = appView.getNamingLens();
+    boolean rewritten = classifier.rewrite(kmTypeVisitor, appView);
     if (abbreviatedType != null) {
-      rewritten |=
-          abbreviatedType.rewrite(kmTypeVisitor::visitAbbreviatedType, appView, namingLens);
+      rewritten |= abbreviatedType.rewrite(kmTypeVisitor::visitAbbreviatedType, appView);
     }
     if (outerType != null) {
-      rewritten |= outerType.rewrite(kmTypeVisitor::visitOuterType, appView, namingLens);
+      rewritten |= outerType.rewrite(kmTypeVisitor::visitOuterType, appView);
     }
     for (KotlinTypeProjectionInfo argument : arguments) {
       rewritten |=
           argument.rewrite(
-              kmTypeVisitor::visitArgument,
-              kmTypeVisitor::visitStarProjection,
-              appView,
-              namingLens);
+              kmTypeVisitor::visitArgument, kmTypeVisitor::visitStarProjection, appView);
     }
     rewritten |=
-        flexibleTypeUpperBound.rewrite(
-            kmTypeVisitor::visitFlexibleTypeUpperBound, appView, namingLens);
+        flexibleTypeUpperBound.rewrite(kmTypeVisitor::visitFlexibleTypeUpperBound, appView);
     if (annotations.isEmpty() && !isRaw) {
       return rewritten;
     }
@@ -115,7 +108,7 @@
         (JvmTypeExtensionVisitor) kmTypeVisitor.visitExtensions(JvmTypeExtensionVisitor.TYPE);
     if (extensionVisitor != null) {
       for (KotlinAnnotationInfo annotation : annotations) {
-        rewritten |= annotation.rewrite(extensionVisitor::visitAnnotation, appView, namingLens);
+        rewritten |= annotation.rewrite(extensionVisitor::visitAnnotation, appView);
       }
       extensionVisitor.visit(isRaw);
     }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeParameterInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeParameterInfo.java
index 21aeaa1..e6cc10f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeParameterInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeParameterInfo.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import com.google.common.collect.ImmutableList;
@@ -85,14 +84,11 @@
   }
 
   boolean rewrite(
-      KmVisitorProviders.KmTypeParameterVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      KmVisitorProviders.KmTypeParameterVisitorProvider visitorProvider, AppView<?> appView) {
     KmTypeParameterVisitor kmTypeParameterVisitor = visitorProvider.get(flags, name, id, variance);
     boolean rewritten = false;
     for (KotlinTypeInfo originalUpperBound : originalUpperBounds) {
-      rewritten |=
-          originalUpperBound.rewrite(kmTypeParameterVisitor::visitUpperBound, appView, namingLens);
+      rewritten |= originalUpperBound.rewrite(kmTypeParameterVisitor::visitUpperBound, appView);
     }
     if (annotations.isEmpty()) {
       return rewritten;
@@ -102,7 +98,7 @@
             kmTypeParameterVisitor.visitExtensions(JvmTypeParameterExtensionVisitor.TYPE);
     if (extensionVisitor != null) {
       for (KotlinAnnotationInfo annotation : annotations) {
-        rewritten |= annotation.rewrite(extensionVisitor::visitAnnotation, appView, namingLens);
+        rewritten |= annotation.rewrite(extensionVisitor::visitAnnotation, appView);
       }
     }
     return rewritten;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeProjectionInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeProjectionInfo.java
index 8fe760b..85791fe 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeProjectionInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeProjectionInfo.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import kotlinx.metadata.KmTypeProjection;
@@ -38,13 +37,12 @@
   boolean rewrite(
       KmVisitorProviders.KmTypeProjectionVisitorProvider visitorProvider,
       KmVisitorProviders.KmTypeStarProjectionVisitorProvider starProjectionProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      AppView<?> appView) {
     if (isStarProjection()) {
       starProjectionProvider.get();
       return false;
     } else {
-      return typeInfo.rewrite(flags -> visitorProvider.get(flags, variance), appView, namingLens);
+      return typeInfo.rewrite(flags -> visitorProvider.get(flags, variance), appView);
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java
index 4fd93a0..adbb277 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.kotlin.Kotlin.ClassClassifiers;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.DescriptorUtils;
 import java.util.function.Consumer;
@@ -72,7 +71,6 @@
   boolean toRenamedDescriptorOrDefault(
       Consumer<String> rewrittenConsumer,
       AppView<?> appView,
-      NamingLens namingLens,
       String defaultValue) {
     if (known == null) {
       rewrittenConsumer.accept(originalName);
@@ -91,7 +89,7 @@
         return true;
       }
     }
-    String renamedString = namingLens.lookupDescriptor(rewrittenType).toString();
+    String renamedString = appView.getNamingLens().lookupDescriptor(rewrittenType).toString();
     rewrittenConsumer.accept(renamedString);
     return !known.toDescriptorString().equals(renamedString);
   }
@@ -107,7 +105,6 @@
   boolean toRenamedBinaryNameOrDefault(
       Consumer<String> rewrittenConsumer,
       AppView<?> appView,
-      NamingLens namingLens,
       String defaultValue) {
     if (known == null) {
       // Unknown values are always on the input form, so we can just return it.
@@ -124,7 +121,6 @@
           }
         },
         appView,
-        namingLens,
         defaultValue);
   }
 
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java
index 293c35a..1e12db6 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
 import com.android.tools.r8.utils.Reporter;
 import com.google.common.collect.ImmutableList;
@@ -67,15 +66,12 @@
   }
 
   boolean rewrite(
-      KmVisitorProviders.KmValueParameterVisitorProvider visitorProvider,
-      AppView<?> appView,
-      NamingLens namingLens) {
+      KmVisitorProviders.KmValueParameterVisitorProvider visitorProvider, AppView<?> appView) {
     KmValueParameterVisitor kmValueParameterVisitor = visitorProvider.get(flags, name);
-    boolean rewritten = type.rewrite(kmValueParameterVisitor::visitType, appView, namingLens);
+    boolean rewritten = type.rewrite(kmValueParameterVisitor::visitType, appView);
     if (varargElementType != null) {
       rewritten |=
-          varargElementType.rewrite(
-              kmValueParameterVisitor::visitVarargElementType, appView, namingLens);
+          varargElementType.rewrite(kmValueParameterVisitor::visitVarargElementType, appView);
     }
     return rewritten;
   }
diff --git a/src/main/java/com/android/tools/r8/naming/PrefixRewritingNamingLens.java b/src/main/java/com/android/tools/r8/naming/PrefixRewritingNamingLens.java
index 2add666..297c363 100644
--- a/src/main/java/com/android/tools/r8/naming/PrefixRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/PrefixRewritingNamingLens.java
@@ -16,27 +16,20 @@
 // Naming lens for rewriting type prefixes.
 public class PrefixRewritingNamingLens extends NonIdentityNamingLens {
 
-  final NamingLens namingLens;
-  final InternalOptions options;
-  final AppView<?> appView;
+  private final AppView<?> appView;
+  private final NamingLens namingLens;
 
   public static NamingLens createPrefixRewritingNamingLens(AppView<?> appView) {
-    return createPrefixRewritingNamingLens(appView, NamingLens.getIdentityLens());
-  }
-
-  public static NamingLens createPrefixRewritingNamingLens(
-      AppView<?> appView, NamingLens namingLens) {
     if (!appView.typeRewriter.isRewriting()) {
-      return namingLens;
+      return appView.getNamingLens();
     }
-    return new PrefixRewritingNamingLens(namingLens, appView);
+    return new PrefixRewritingNamingLens(appView);
   }
 
-  public PrefixRewritingNamingLens(NamingLens namingLens, AppView<?> appView) {
+  public PrefixRewritingNamingLens(AppView<?> appView) {
     super(appView.dexItemFactory());
     this.appView = appView;
-    this.namingLens = namingLens;
-    this.options = appView.options();
+    this.namingLens = appView.getNamingLens();
   }
 
   private boolean isRenamed(DexType type) {
diff --git a/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java b/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
index fe2654f..9fdb66a 100644
--- a/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
@@ -17,25 +17,24 @@
 // Naming lens for rewriting java.lang.Record to the internal RecordTag type.
 public class RecordRewritingNamingLens extends NonIdentityNamingLens {
 
-  final NamingLens namingLens;
   private final DexItemFactory factory;
+  private final NamingLens namingLens;
 
-  public static NamingLens createRecordRewritingNamingLens(
-      AppView<?> appView, NamingLens namingLens) {
+  public static NamingLens createRecordRewritingNamingLens(AppView<?> appView) {
     if (appView.options().shouldDesugarRecords()
         && appView
                 .appInfo()
                 .definitionForWithoutExistenceAssert(appView.dexItemFactory().recordType)
             != null) {
-      return new RecordRewritingNamingLens(namingLens, appView);
+      return new RecordRewritingNamingLens(appView);
     }
-    return namingLens;
+    return appView.getNamingLens();
   }
 
-  public RecordRewritingNamingLens(NamingLens namingLens, AppView<?> appView) {
+  public RecordRewritingNamingLens(AppView<?> appView) {
     super(appView.dexItemFactory());
-    this.namingLens = namingLens;
-    factory = appView.dexItemFactory();
+    this.factory = appView.dexItemFactory();
+    this.namingLens = appView.getNamingLens();
   }
 
   private boolean isRenamed(DexType type) {
diff --git a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
index e50737d..e4b384f 100644
--- a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
+++ b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.graph.GenericSignatureContextBuilder;
 import com.android.tools.r8.graph.GenericSignaturePartialTypeArgumentApplier;
 import com.android.tools.r8.graph.GenericSignatureTypeRewriter;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.ThreadUtils;
 import java.util.concurrent.ExecutionException;
@@ -24,23 +23,21 @@
 public class GenericSignatureRewriter {
 
   private final AppView<?> appView;
-  private final NamingLens namingLens;
   private final GenericSignatureContextBuilder contextBuilder;
 
-  public GenericSignatureRewriter(AppView<?> appView, NamingLens namingLens) {
-    this(appView, namingLens, null);
+  public GenericSignatureRewriter(AppView<?> appView) {
+    this(appView, null);
   }
 
   public GenericSignatureRewriter(
-      AppView<?> appView, NamingLens namingLens, GenericSignatureContextBuilder contextBuilder) {
+      AppView<?> appView, GenericSignatureContextBuilder contextBuilder) {
     this.appView = appView;
-    this.namingLens = namingLens;
     this.contextBuilder = contextBuilder;
   }
 
   public void runForD8(Iterable<? extends DexProgramClass> classes, ExecutorService executorService)
       throws ExecutionException {
-    if (namingLens.isIdentityLens()) {
+    if (appView.getNamingLens().isIdentityLens()) {
       return;
     }
     run(classes, executorService);
@@ -50,7 +47,7 @@
       throws ExecutionException {
     // Rewrite signature annotations for applications that are minified or if we have liveness
     // information, since we could have pruned types.
-    if (namingLens.isIdentityLens()
+    if (appView.getNamingLens().isIdentityLens()
         && !appView.appInfo().hasLiveness()
         && !appView.options().parseSignatureAttribute()) {
       return;
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 6f889ff..711610f 100644
--- a/src/main/java/com/android/tools/r8/relocator/Relocator.java
+++ b/src/main/java/com/android/tools/r8/relocator/Relocator.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.jar.CfApplicationWriter;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.AndroidApp;
@@ -85,12 +84,11 @@
       appView.setAppServices(AppServices.builder(appView).build());
 
       SimplePackagesRewritingMapper packageRemapper = new SimplePackagesRewritingMapper(appView);
-      NamingLens namingLens = packageRemapper.compute(command.getMapping());
+      appView.setNamingLens(packageRemapper.compute(command.getMapping()));
 
-      new GenericSignatureRewriter(appView, namingLens).run(appInfo.classes(), executor);
+      new GenericSignatureRewriter(appView).run(appInfo.classes(), executor);
 
-      new CfApplicationWriter(appView, new Marker(Tool.Relocator), namingLens)
-          .write(command.getConsumer());
+      new CfApplicationWriter(appView, new Marker(Tool.Relocator)).write(command.getConsumer());
       options.printWarnings();
     } catch (ExecutionException e) {
       throw unwrapExecutionException(e);
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
index f23e6cf..ffba372 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
@@ -229,11 +229,11 @@
     this.globalSyntheticsStrategy = globalSyntheticsStrategy;
   }
 
-  public Map<DexType, Set<DexType>> getFinalGlobalSyntheticContexts(
-      AppView appView, NamingLens namingLens) {
+  public Map<DexType, Set<DexType>> getFinalGlobalSyntheticContexts(AppView appView) {
     assert isFinalized();
     DexItemFactory factory = appView.dexItemFactory();
     ImmutableMap<DexType, Set<DexType>> globalContexts = committed.getGlobalContexts();
+    NamingLens namingLens = appView.getNamingLens();
     Map<DexType, Set<DexType>> rewritten = new IdentityHashMap<>(globalContexts.size());
     globalContexts.forEach(
         (global, contexts) -> {
diff --git a/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java b/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java
index 81929a2..a1e7b70 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java
@@ -17,7 +17,6 @@
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.references.Reference;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -117,7 +116,7 @@
     }
 
     @Override
-    public void finished(AppView<?> appView, NamingLens namingLens) {
+    public void finished(AppView<?> appView) {
       byte[] bytes = null;
       try {
         bytes = builder.build();
@@ -201,9 +200,9 @@
     }
 
     @Override
-    public void finished(AppView<?> appView, NamingLens namingLens) {
+    public void finished(AppView<?> appView) {
       Map<DexType, Set<DexType>> globalsToContexts =
-          appView.getSyntheticItems().getFinalGlobalSyntheticContexts(appView, namingLens);
+          appView.getSyntheticItems().getFinalGlobalSyntheticContexts(appView);
       Map<DexType, Set<DexType>> contextToGlobals = new IdentityHashMap<>();
       for (DexType globalType : globalToBytes.keySet()) {
         // It would be good to assert that the global is a synthetic type, but the naming-lens
@@ -249,5 +248,5 @@
     }
   }
 
-  public abstract void finished(AppView<?> appView, NamingLens namingLens);
+  public abstract void finished(AppView<?> appView);
 }
diff --git a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
index 012f26e..fb61406 100644
--- a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
@@ -40,7 +40,6 @@
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.DexValue.DexValueString;
-import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.OutlineCallerPosition;
@@ -57,7 +56,6 @@
 import com.android.tools.r8.naming.MemberNaming;
 import com.android.tools.r8.naming.MemberNaming.FieldSignature;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.ProguardMapSupplier;
 import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapId;
 import com.android.tools.r8.naming.Range;
@@ -333,7 +331,6 @@
   public static ProguardMapId runAndWriteMap(
       AndroidApp inputApp,
       AppView<?> appView,
-      NamingLens namingLens,
       Timing timing,
       OriginalSourceFiles originalSourceFiles,
       DebugRepresentationPredicate representation) {
@@ -345,9 +342,7 @@
     ClassNameMapper mapper =
         run(
             appView,
-            appView.appInfo().app(),
             inputApp,
-            namingLens,
             originalSourceFiles,
             representation);
     timing.end();
@@ -470,9 +465,7 @@
 
   public static ClassNameMapper run(
       AppView<?> appView,
-      DexApplication application,
       AndroidApp inputApp,
-      NamingLens namingLens,
       OriginalSourceFiles originalSourceFiles,
       DebugRepresentationPredicate representation) {
     // For finding methods in kotlin files based on SourceDebugExtensions, we use a line method map.
@@ -490,17 +483,17 @@
             : new Pc2PcMappingSupport(appView.options().allowDiscardingResidualDebugInfo());
 
     // Collect which files contain which classes that need to have their line numbers optimized.
-    for (DexProgramClass clazz : application.classes()) {
+    for (DexProgramClass clazz : appView.appInfo().classes()) {
       boolean isSyntheticClass = appView.getSyntheticItems().isSyntheticClass(clazz);
 
       IdentityHashMap<DexString, List<ProgramMethod>> methodsByRenamedName =
-          groupMethodsByRenamedName(appView.graphLens(), namingLens, clazz);
+          groupMethodsByRenamedName(appView, clazz);
 
       // At this point we don't know if we really need to add this class to the builder.
       // It depends on whether any methods/fields are renamed or some methods contain positions.
       // Create a supplier which creates a new, cached ClassNaming.Builder on-demand.
       DexType originalType = appView.graphLens().getOriginalType(clazz.type);
-      DexString renamedDescriptor = namingLens.lookupDescriptor(clazz.getType());
+      DexString renamedDescriptor = appView.getNamingLens().lookupDescriptor(clazz.getType());
       LazyBox<ClassNaming.Builder> onDemandClassNamingBuilder =
           new LazyBox<>(
               () ->
@@ -531,8 +524,7 @@
       addClassToClassNaming(originalType, renamedDescriptor, onDemandClassNamingBuilder);
 
       // First transfer renamed fields to classNamingBuilder.
-      addFieldsToClassNaming(
-          appView.graphLens(), namingLens, clazz, originalType, onDemandClassNamingBuilder);
+      addFieldsToClassNaming(appView, clazz, originalType, onDemandClassNamingBuilder);
 
       // Then process the methods, ordered by renamed name.
       List<DexString> renamedMethodNames = new ArrayList<>(methodsByRenamedName.keySet());
@@ -600,7 +592,8 @@
           MethodSignature originalSignature =
               MethodSignature.fromDexMethod(originalMethod, originalMethod.holder != originalType);
 
-          DexString obfuscatedNameDexString = namingLens.lookupName(method.getReference());
+          DexString obfuscatedNameDexString =
+              appView.getNamingLens().lookupName(method.getReference());
           String obfuscatedName = obfuscatedNameDexString.toString();
 
           List<MappingInformation> methodMappingInfo = new ArrayList<>();
@@ -903,16 +896,15 @@
   }
 
   private static void addFieldsToClassNaming(
-      GraphLens graphLens,
-      NamingLens namingLens,
+      AppView<?> appView,
       DexProgramClass clazz,
       DexType originalType,
       LazyBox<Builder> onDemandClassNamingBuilder) {
     clazz.forEachField(
         dexEncodedField -> {
           DexField dexField = dexEncodedField.getReference();
-          DexField originalField = graphLens.getOriginalFieldSignature(dexField);
-          DexString renamedName = namingLens.lookupName(dexField);
+          DexField originalField = appView.graphLens().getOriginalFieldSignature(dexField);
+          DexString renamedName = appView.getNamingLens().lookupName(dexField);
           if (renamedName != originalField.name || originalField.holder != originalType) {
             FieldSignature originalSignature =
                 FieldSignature.fromDexField(originalField, originalField.holder != originalType);
@@ -923,16 +915,16 @@
   }
 
   public static IdentityHashMap<DexString, List<ProgramMethod>> groupMethodsByRenamedName(
-      GraphLens graphLens, NamingLens namingLens, DexProgramClass clazz) {
+      AppView<?> appView, DexProgramClass clazz) {
     IdentityHashMap<DexString, List<ProgramMethod>> methodsByRenamedName =
         new IdentityHashMap<>(clazz.getMethodCollection().size());
     for (ProgramMethod programMethod : clazz.programMethods()) {
       // Add method only if renamed, moved, or contains positions.
       DexEncodedMethod definition = programMethod.getDefinition();
       DexMethod method = programMethod.getReference();
-      DexString renamedName = namingLens.lookupName(method);
+      DexString renamedName = appView.getNamingLens().lookupName(method);
       if (renamedName != method.name
-          || graphLens.getOriginalMethodSignature(method) != method
+          || appView.graphLens().getOriginalMethodSignature(method) != method
           || doesContainPositions(definition)
           || definition.isD8R8Synthesized()) {
         methodsByRenamedName
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 50cce70..bc5f2e4 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -23,7 +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.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.shaking.FilteredClassPath;
@@ -2275,12 +2274,7 @@
 
   public static void writeApplication(AppView<?> appView, InternalOptions options)
       throws ExecutionException {
-    R8.writeApplication(
-        Executors.newSingleThreadExecutor(),
-        appView,
-        NamingLens.getIdentityLens(),
-        options,
-        null);
+    R8.writeApplication(appView, null, Executors.newSingleThreadExecutor());
   }
 
   public static void disassemble(AndroidApp app, PrintStream ps) throws IOException {
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 066e758..90cf068 100644
--- a/src/test/java/com/android/tools/r8/dex/DebugByteCodeWriterTest.java
+++ b/src/test/java/com/android/tools/r8/dex/DebugByteCodeWriterTest.java
@@ -18,7 +18,6 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.Reporter;
@@ -52,7 +51,6 @@
                 GlobalSyntheticsStrategy.forNonSynthesizing()));
     return new ObjectToOffsetMapping(
         appView,
-        NamingLens.getIdentityLens(),
         new LensCodeRewriterUtils(appView),
         Collections.emptyList(),
         Collections.emptyList(),
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 a540713..ed70ece 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -67,7 +67,6 @@
 import com.android.tools.r8.ir.regalloc.RegisterAllocator;
 import com.android.tools.r8.ir.synthetic.SynthesizedCode;
 import com.android.tools.r8.jasmin.JasminBuilder;
-import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.SynthesizedOrigin;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
@@ -892,8 +891,7 @@
             AppView.createForD8(
                 AppInfo.createInitialAppInfo(
                     application, GlobalSyntheticsStrategy.forNonSynthesizing())),
-            null,
-            NamingLens.getIdentityLens());
+            null);
     ExecutorService executor = ThreadUtils.getExecutorService(options);
     AndroidAppConsumers compatSink = new AndroidAppConsumers(options);
     try {
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 ebfd956..30274f0 100644
--- a/src/test/java/com/android/tools/r8/utils/Smali.java
+++ b/src/test/java/com/android/tools/r8/utils/Smali.java
@@ -11,7 +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.naming.NamingLens;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.google.common.collect.ImmutableList;
@@ -117,8 +116,7 @@
               AppView.createForD8(
                   AppInfo.createInitialAppInfo(
                       dexApp, GlobalSyntheticsStrategy.forNonSynthesizing())),
-              null,
-              NamingLens.getIdentityLens());
+              null);
       writer.write(executor);
       return consumer.contents;
     } finally {