Avoid generating machine specification unecessarily

Bug: b/302055774
Change-Id: Ib578e79ee86b3d5b79253b1b120986feb12ce0e7
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java
index de42de1..e0af2eb 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java
@@ -26,6 +26,8 @@
 
   boolean isLibraryCompilation();
 
+  String getIdentifier();
+
   String getJsonSource();
 
   String getSynthesizedLibraryClassesPackagePrefix();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java
index 325cdb0..fcd5d0a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java
@@ -69,6 +69,7 @@
     return rewritingFlags;
   }
 
+  @Override
   public String getIdentifier() {
     return topLevelFlags.getIdentifier();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java
index 3507445..419c71e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java
@@ -73,6 +73,7 @@
     return topLevelFlags.getSynthesizedLibraryClassesPackagePrefix();
   }
 
+  @Override
   public String getIdentifier() {
     return topLevelFlags.getIdentifier();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
index d163832..96e3e18 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
@@ -38,7 +38,7 @@
           .setAllowReadingEmptyArtProfileProvidersMultipleTimesForTesting(true)
           .getOptions();
 
-  final MachineDesugaredLibrarySpecification desugaredLibrarySpecification;
+  final DesugaredLibrarySpecification desugaredLibrarySpecification;
   final Path desugaredLibrarySpecificationPath;
   final Collection<Path> desugaredLibraryImplementation;
   final Path output;
@@ -48,8 +48,7 @@
       String desugarConfigurationPath,
       String desugarImplementationPath,
       String output,
-      String androidJarPath)
-      throws Exception {
+      String androidJarPath) {
     this(
         desugarConfigurationPath == null ? null : Paths.get(desugarConfigurationPath),
         desugarImplementationPath == null
@@ -63,30 +62,21 @@
       Path desugarConfigurationPath,
       Collection<Path> desugarImplementationPath,
       Path output,
-      Path androidJar)
-      throws Exception {
+      Path androidJar) {
     assert androidJar != null;
     this.desugaredLibrarySpecificationPath = desugarConfigurationPath;
     this.androidJar = androidJar;
-    this.desugaredLibrarySpecification = computeMachineSpecification();
+    this.desugaredLibrarySpecification = readDesugaredLibraryConfiguration();
     this.desugaredLibraryImplementation = desugarImplementationPath;
     this.output = output;
   }
 
-  private MachineDesugaredLibrarySpecification computeMachineSpecification() throws IOException {
+  private DesugaredLibrarySpecification readDesugaredLibraryConfiguration() {
     if (desugaredLibrarySpecificationPath == null) {
       return MachineDesugaredLibrarySpecification.empty();
     }
-    DexApplication app = createApp(androidJar, options);
-    DesugaredLibrarySpecification specification =
-        readDesugaredLibraryConfiguration(desugaredLibrarySpecificationPath);
-    return specification.toMachineSpecification(app, Timing.empty());
-  }
-
-  private DesugaredLibrarySpecification readDesugaredLibraryConfiguration(
-      Path desugarConfigurationPath) {
     return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
-        StringResource.fromFile(desugarConfigurationPath),
+        StringResource.fromFile(desugaredLibrarySpecificationPath),
         factory,
         reporter,
         false,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
index 0a1a614..cfe94c5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
@@ -21,8 +21,7 @@
       String desugarConfigurationPath,
       String desugarImplementationPath,
       String ouputFile,
-      String androidJarPath)
-      throws Exception {
+      String androidJarPath) {
     super(desugarConfigurationPath, desugarImplementationPath, ouputFile, androidJarPath);
     this.minApi = AndroidApiLevel.getAndroidApiLevel(minApi);
   }
@@ -36,7 +35,7 @@
             .run(desugaredLibraryImplementation, desugaredLibrarySpecificationPath);
     System.out.println(
         "Generating lint files for "
-            + desugaredLibrarySpecification.getIdentifier()
+            + getDebugIdentifier()
             + " (compile API "
             + compilationLevel
             + ")");
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java
index 16e9be8..09abea0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java
@@ -26,8 +26,7 @@
   private static final boolean FORMAT_WITH_FIELD = true;
 
   public static GenerateDesugaredLibraryLintFiles createForTesting(
-      Path specification, Set<Path> implementation, Path outputDirectory, Path androidJar)
-      throws Exception {
+      Path specification, Set<Path> implementation, Path outputDirectory, Path androidJar) {
     return new GenerateDesugaredLibraryLintFiles(
         specification, implementation, outputDirectory, androidJar);
   }
@@ -36,8 +35,7 @@
       String desugarConfigurationPath,
       String desugarImplementationPath,
       String outputDirectory,
-      String androidJarPath)
-      throws Exception {
+      String androidJarPath) {
     super(desugarConfigurationPath, desugarImplementationPath, outputDirectory, androidJarPath);
   }
 
@@ -45,8 +43,7 @@
       Path desugarConfigurationPath,
       Collection<Path> desugarImplementationPath,
       Path outputDirectory,
-      Path androidJar)
-      throws Exception {
+      Path androidJar) {
     super(desugarConfigurationPath, desugarImplementationPath, outputDirectory, androidJar);
   }
 
@@ -149,6 +146,12 @@
     writeLintFiles(compilationApiLevel, minApiLevel, supportedMethods);
   }
 
+  String getDebugIdentifier() {
+    return desugaredLibrarySpecification.getIdentifier() == null
+        ? "backported methods only"
+        : desugaredLibrarySpecification.getIdentifier();
+  }
+
   @Override
   public AndroidApiLevel run() throws Exception {
     AndroidApiLevel compilationLevel =
@@ -158,7 +161,7 @@
             .run(desugaredLibraryImplementation, desugaredLibrarySpecificationPath);
     System.out.println(
         "Generating lint files for "
-            + desugaredLibrarySpecification.getIdentifier()
+            + getDebugIdentifier()
             + " (compile API "
             + compilationLevel
             + ")");
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
index 859abe2..98b73ce 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
@@ -61,10 +61,7 @@
   private final boolean addBackports;
 
   public SupportedClassesGenerator(InternalOptions options, Path androidJar) throws IOException {
-    this.options = options;
-    this.appForMax = createAppForMax(androidJar);
-    this.minApi = AndroidApiLevel.B;
-    this.addBackports = false;
+    this(options, androidJar, AndroidApiLevel.B, false);
   }
 
   public SupportedClassesGenerator(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
index 985eb29..51253df 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
@@ -89,6 +89,7 @@
     return topLevelFlags.getSynthesizedLibraryClassesPackagePrefix();
   }
 
+  @Override
   public String getIdentifier() {
     return topLevelFlags.getIdentifier();
   }