Remove updates to highest string in conversion

The information is unused until we do collect indexed items as part of
finalizing the app before writing.

Change-Id: I6c050b52b160930ee3fbadcfd7e101d78c1d211e
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 3d5f387..930cdda 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -932,11 +932,6 @@
       if (!mapping.hasJumboStrings()) {
         return;
       }
-      // If the globally highest sorting string is not a jumbo string this is also a no-op.
-      if (application.highestSortingString != null
-          && application.highestSortingString.compareTo(mapping.getFirstJumboString()) < 0) {
-        return;
-      }
     }
     for (DexProgramClass clazz : classes) {
       clazz.forEachProgramMethodMatching(
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 13f6812..dede86b 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -146,7 +146,7 @@
             newDebugInfo);
     // As we have rewritten the code, we now know that its highest string index that is not
     // a jumbo-string is firstJumboString (actually the previous string, but we do not have that).
-    newCode.highestSortingString = firstJumboString;
+    newCode.setHighestSortingStringForJumboProcessedCode(firstJumboString);
     return newCode;
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index 311a287..da73661 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -33,23 +33,18 @@
   public final DexItemFactory dexItemFactory;
   private final DexApplicationReadFlags flags;
 
-  // Information on the lexicographically largest string referenced from code.
-  public final DexString highestSortingString;
-
   /** Constructor should only be invoked by the DexApplication.Builder. */
   DexApplication(
       ClassNameMapper proguardMap,
       DexApplicationReadFlags flags,
       ImmutableList<DataResourceProvider> dataResourceProviders,
       InternalOptions options,
-      DexString highestSortingString,
       Timing timing) {
     this.proguardMap = proguardMap;
     this.flags = flags;
     this.dataResourceProviders = dataResourceProviders;
     this.options = options;
     this.dexItemFactory = options.itemFactory;
-    this.highestSortingString = highestSortingString;
     this.timing = timing;
   }
 
@@ -168,7 +163,6 @@
     final Timing timing;
     DexApplicationReadFlags flags;
 
-    DexString highestSortingString;
     private final Collection<DexProgramClass> synthesizedClasses;
 
     public Builder(InternalOptions options, Timing timing) {
@@ -186,7 +180,6 @@
       dataResourceProviders.addAll(application.dataResourceProviders);
       proguardMap = application.getProguardMap();
       timing = application.timing;
-      highestSortingString = application.highestSortingString;
       options = application.options;
       dexItemFactory = application.dexItemFactory;
       synthesizedClasses = new ArrayList<>();
@@ -246,11 +239,6 @@
       return self();
     }
 
-    public synchronized T setHighestSortingString(DexString value) {
-      highestSortingString = value;
-      return self();
-    }
-
     public synchronized T addProgramClass(DexProgramClass clazz) {
       programClasses.add(clazz);
       return self();
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 f59c187..763c1b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -76,7 +76,7 @@
   public final TryHandler[] handlers;
   public final DexInstruction[] instructions;
 
-  public DexString highestSortingString;
+  private DexString highestSortingString;
   private DexDebugInfo debugInfo;
   private DexDebugInfoForWriting debugInfoForWriting;
 
@@ -210,6 +210,13 @@
     return DexCode::specify;
   }
 
+  public void setHighestSortingStringForJumboProcessedCode(DexString nonJumboString) {
+    // The call of this method marks this code object as properly jumbo-string processed.
+    // In principle, it should be possible to mark as such and assert that we do not reattempt
+    // processing in rewriteCodeWithJumboStrings.
+    highestSortingString = nonJumboString;
+  }
+
   @Override
   public DexWritableCode rewriteCodeWithJumboStrings(
       ProgramMethod method, ObjectToOffsetMapping mapping, AppView<?> appView, boolean force) {
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 08dad18..b6591b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -49,9 +49,8 @@
       ImmutableCollection<DexClasspathClass> classpathClasses,
       ImmutableList<DataResourceProvider> dataResourceProviders,
       InternalOptions options,
-      DexString highestSortingString,
       Timing timing) {
-    super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+    super(proguardMap, flags, dataResourceProviders, options, timing);
     this.programOrClasspathClasses = programOrClasspathClasses;
     this.libraryClasses = libraryClasses;
     this.programClasses = programClasses;
@@ -324,7 +323,6 @@
           newClasspathClasses,
           ImmutableList.copyOf(dataResourceProviders),
           options,
-          highestSortingString,
           timing);
     }
 
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 96d4bfa..b5b28fd 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -40,9 +40,8 @@
       ClasspathClassCollection classpathClasses,
       LibraryClassCollection libraryClasses,
       InternalOptions options,
-      DexString highestSortingString,
       Timing timing) {
-    super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+    super(proguardMap, flags, dataResourceProviders, options, timing);
     this.programClasses = programClasses;
     this.classpathClasses = classpathClasses;
     this.libraryClasses = libraryClasses;
@@ -329,7 +328,6 @@
           classpathClasses,
           libraryClasses,
           options,
-          highestSortingString,
           timing);
     }
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 9329ef3..119e852 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -1157,7 +1157,6 @@
             .finalizeCode(code, bytecodeMetadataProvider, timing),
         appView);
     markProcessed(code, feedback);
-    updateHighestSortingStrings(definition);
   }
 
   public void markProcessed(IRCode code, OptimizationFeedback feedback) {
@@ -1185,18 +1184,6 @@
     return true;
   }
 
-  protected synchronized void updateHighestSortingStrings(DexEncodedMethod method) {
-    Code code = method.getCode();
-    assert code.isDexWritableCode();
-    DexString highestSortingReferencedString = code.asDexWritableCode().getHighestSortingString();
-    if (highestSortingReferencedString != null) {
-      if (highestSortingString == null
-          || highestSortingReferencedString.compareTo(highestSortingString) > 0) {
-        highestSortingString = highestSortingReferencedString;
-      }
-    }
-  }
-
   public void printPhase(String phase) {
     if (!options.extensiveLoggingFilter.isEmpty()) {
       System.out.println("Entering phase: " + phase);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
index bcadf66..c5c3e73 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
@@ -85,7 +85,7 @@
     application = commitPendingSyntheticItems(appView, application);
 
     // Build a new application with jumbo string info,
-    Builder<?> builder = application.builder().setHighestSortingString(highestSortingString);
+    Builder<?> builder = application.builder();
 
     if (appView.options().isDesugaredLibraryCompilation()) {
       new EmulatedInterfaceApplicationRewriter(appView).rewriteApplication(builder);
@@ -169,9 +169,6 @@
     } else {
       assert definition.getCode().isDexCode();
     }
-    if (!options.isGeneratingClassFiles()) {
-      updateHighestSortingStrings(definition);
-    }
   }
 
   private void checkPrefixMerging(ProgramMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
index bfdb3f4..729a2e5 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.Code;
 import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.DexApplication.Builder;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -205,10 +204,6 @@
     // synthetics.)
     commitPendingSyntheticItems(appView);
 
-    // Build a new application with jumbo string info.
-    Builder<?> builder = appView.appInfo().app().builder();
-    builder.setHighestSortingString(highestSortingString);
-
     // Update optimization info for all synthesized methods at once.
     feedback.updateVisibleOptimizationInfo();
 
@@ -223,7 +218,7 @@
     // Assure that no more optimization feedback left after post processing.
     assert feedback.noUpdatesLeft();
     finalizeLirToOutputFormat(timing, executorService);
-    return builder.build();
+    return appView.appInfo().app();
   }
 
   private void finalizeLirToOutputFormat(Timing timing, ExecutorService executorService)
@@ -270,7 +265,6 @@
           new IRToDexFinalizer(appView, deadCodeRemover)
               .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
           appView);
-      updateHighestSortingStrings(method.getDefinition());
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
index dd474a2..db99557 100644
--- a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
+++ b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
@@ -53,7 +53,8 @@
 
   @Test
   public void testR8() throws Exception {
-    runTestR8();
+    // Disable shrinking and obfuscation so that the fields and their names are retained.
+    runTestR8(b -> b.addDontShrink().addDontObfuscate());
   }
 
   @Test