Move CustomConversion gradle task to third_party and test

Bug: b/291198792
Change-Id: If8744f32b465a5e49570ce2d6feaefadeaae2aeb
diff --git a/.gitignore b/.gitignore
index 78a056c..439dc2c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -156,6 +156,8 @@
 third_party/multidex
 third_party/multidex.tar.gz
 third_party/nest/*
+third_party/openjdk/custom_conversion
+third_party/openjdk/custom_conversion.tar.gz
 third_party/openjdk/desugar_jdk_libs
 third_party/openjdk/desugar_jdk_libs.tar.gz
 third_party/openjdk/desugar_jdk_libs_11
diff --git a/build.gradle b/build.gradle
index 6c28944..41d7c5c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,6 @@
 
 
 
-import desugaredlibrary.CustomConversionAsmRewriterTask
 import net.ltgt.gradle.errorprone.CheckSeverity
 import org.gradle.internal.os.OperatingSystem
 import tasks.DownloadDependency
@@ -94,12 +93,6 @@
         }
         output.resourcesDir = 'build/classes/cfSegments'
     }
-    libraryDesugarConversions {
-        java {
-            srcDirs = ['src/library_desugar/java']
-        }
-        output.resourcesDir = 'build/classes/library_desugar_conversions'
-    }
     debugTestResources {
         java {
             srcDirs = ['src/test/debugTestResources']
@@ -337,6 +330,7 @@
                 "kotlin/kotlin-compiler-1.8.0",
                 "kotlinx-coroutines-1.3.6",
                 "multidex",
+                "openjdk/custom_conversion",
                 "openjdk/openjdk-rt-1.8",
                 "openjdk/desugar_jdk_libs",
                 "openjdk/desugar_jdk_libs_11",
@@ -972,19 +966,7 @@
     }
 }
 
-task rawBuildLibraryDesugarConversions(type: Zip, dependsOn: downloadDeps) {
-    from sourceSets.libraryDesugarConversions.output
-    include "java/**/*.class"
-    baseName 'library_desugar_conversions_raw'
-    destinationDir file('build/tmp/desugaredlibrary')
-}
-
-task buildLibraryDesugarConversions(type: CustomConversionAsmRewriterTask, dependsOn: rawBuildLibraryDesugarConversions) {
-    rawJar = file("build/tmp/desugaredlibrary/library_desugar_conversions_raw.zip")
-    outputDirectory = file("build/libs")
-}
-
-task testJarSources(type: Jar, dependsOn: [testClasses, buildLibraryDesugarConversions]) {
+task testJarSources(type: Jar, dependsOn: [testClasses]) {
     archiveFileName = "r8testsbase.jar"
     from sourceSets.test.output
     // We only want to include tests that use R8 when generating keep rules for applymapping.
@@ -1873,7 +1855,6 @@
 test { task ->
 
     dependsOn sourceSets.keepanno.output
-    dependsOn buildLibraryDesugarConversions
     // R8.jar is required for running bootstrap tests.
     dependsOn r8
 
diff --git a/buildSrc/src/main/java/desugaredlibrary/AsmRewriter.java b/buildSrc/src/main/java/desugaredlibrary/AsmRewriter.java
deleted file mode 100644
index cc1fcf2..0000000
--- a/buildSrc/src/main/java/desugaredlibrary/AsmRewriter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package desugaredlibrary;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-public abstract class AsmRewriter {
-
-  public static int ASM_VERSION = Opcodes.ASM9;
-
-  public static byte[] transformInvoke(byte[] bytes, MethodTransformer transformer) {
-    ClassReader reader = new ClassReader(bytes);
-    ClassWriter writer = new ClassWriter(reader, 0);
-    ClassVisitor subvisitor = new InvokeTransformer(writer, transformer);
-    reader.accept(subvisitor, 0);
-    return writer.toByteArray();
-  }
-
-  public static class InvokeTransformer extends ClassVisitor {
-
-    private final MethodTransformer transformer;
-
-    InvokeTransformer(ClassWriter writer, MethodTransformer transformer) {
-      super(ASM_VERSION, writer);
-      this.transformer = transformer;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(
-        int access, String name, String descriptor, String signature, String[] exceptions) {
-      MethodVisitor sub = super.visitMethod(access, name, descriptor, signature, exceptions);
-      transformer.setMv(sub);
-      return transformer;
-    }
-  }
-
-  public static class MethodTransformer extends MethodVisitor {
-
-    protected MethodTransformer(int api) {
-      super(api);
-    }
-
-    public void setMv(MethodVisitor visitor) {
-      this.mv = visitor;
-    }
-  }
-}
diff --git a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java b/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java
deleted file mode 100644
index 1a09676..0000000
--- a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package desugaredlibrary;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import javax.inject.Inject;
-import org.gradle.api.DefaultTask;
-import org.gradle.api.file.RegularFileProperty;
-import org.gradle.api.tasks.InputFile;
-import org.gradle.api.tasks.OutputDirectory;
-import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.WorkAction;
-import org.gradle.workers.WorkParameters;
-import org.gradle.workers.WorkerExecutor;
-
-public class CustomConversionAsmRewriterTask extends DefaultTask {
-
-  private final WorkerExecutor workerExecutor;
-
-  private File rawJar;
-  private File outputDirectory;
-
-  @Inject
-  public CustomConversionAsmRewriterTask(WorkerExecutor workerExecutor) {
-    this.workerExecutor = workerExecutor;
-  }
-
-  @InputFile
-  public File getRawJar() {
-    return rawJar;
-  }
-
-  public void setRawJar(File rawJar) {
-    this.rawJar = rawJar;
-  }
-
-  @OutputDirectory
-  public File getOutputDirectory() {
-    return outputDirectory;
-  }
-
-  public void setOutputDirectory(File outputDirectory) {
-    this.outputDirectory = outputDirectory;
-  }
-
-  @TaskAction
-  void exec() {
-    workerExecutor
-        .noIsolation()
-        .submit(
-            Run.class,
-            parameters -> {
-              parameters.getRawJar().set(rawJar);
-              parameters.getOutputDirectory().set(outputDirectory);
-            });
-  }
-
-  public interface RunParameters extends WorkParameters {
-    RegularFileProperty getRawJar();
-
-    RegularFileProperty getOutputDirectory();
-  }
-
-  public abstract static class Run implements WorkAction<RunParameters> {
-
-    @Override
-    public void execute() {
-      try {
-        RunParameters parameters = getParameters();
-        CustomConversionAsmRewriter.generateJars(
-            parameters.getRawJar().getAsFile().get().toPath(),
-            parameters.getOutputDirectory().getAsFile().get().toPath());
-      } catch (IOException e) {
-        throw new UncheckedIOException(e);
-      }
-    }
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index ee9d68e..ce9a7fc 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -196,6 +196,7 @@
   private static final AndroidApiLevel DEFAULT_MIN_SDK = AndroidApiLevel.I;
 
   public static final String OPEN_JDK_DIR = THIRD_PARTY_DIR + "openjdk/";
+  public static final String CUSTOM_CONVERSION_DIR = OPEN_JDK_DIR + "custom_conversion/";
   public static final String JAVA_8_RUNTIME = OPEN_JDK_DIR + "openjdk-rt-1.8/rt.jar";
   public static final String JDK_11_TESTS_DIR = OPEN_JDK_DIR + "jdk-11-test/";
   public static final String JDK_11_TIME_TESTS_DIR = JDK_11_TESTS_DIR + "java/time/";
@@ -257,9 +258,7 @@
   public static final Path AAPT2 = Paths.get(THIRD_PARTY_DIR, "aapt2", "aapt2");
 
   public static Path getDesugarLibConversions(CustomConversionVersion legacy) {
-    return legacy == CustomConversionVersion.LEGACY
-        ? Paths.get(LIBS_DIR, "library_desugar_conversions_legacy.jar")
-        : Paths.get(LIBS_DIR, "library_desugar_conversions.jar");
+    return Paths.get(CUSTOM_CONVERSION_DIR, legacy.getFileName());
   }
 
   public static boolean isLocalDevelopment() {
diff --git a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriteDescription.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/CustomConversionAsmRewriteDescription.java
similarity index 87%
rename from buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriteDescription.java
rename to src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/CustomConversionAsmRewriteDescription.java
index d1b949b..54fbe3c 100644
--- a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriteDescription.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/CustomConversionAsmRewriteDescription.java
@@ -1,8 +1,8 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package desugaredlibrary;
+package com.android.tools.r8.desugar.desugaredlibrary.customconversion;
 
 import com.google.common.collect.ImmutableSet;
 import java.util.HashMap;
@@ -16,8 +16,7 @@
 
   private static final Set<String> ENUM_WRAP_CONVERT_OWNER =
       ImmutableSet.of(
-          "j$/nio/file/attribute/PosixFilePermission",
-          "j$/util/stream/Collector$Characteristics");
+          "j$/nio/file/attribute/PosixFilePermission", "j$/util/stream/Collector$Characteristics");
   private static final Set<String> WRAP_CONVERT_OWNER =
       ImmutableSet.of(
           "j$/util/stream/DoubleStream",
diff --git a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriter.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java
similarity index 76%
rename from buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriter.java
rename to src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java
index 95a5ecc..0712f45 100644
--- a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriter.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java
@@ -1,17 +1,17 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package desugaredlibrary;
+package com.android.tools.r8.desugar.desugaredlibrary.customconversion;
 
-import static desugaredlibrary.AsmRewriter.ASM_VERSION;
-import static desugaredlibrary.CustomConversionAsmRewriteDescription.CONVERT;
-import static desugaredlibrary.CustomConversionAsmRewriteDescription.WRAP_CONVERT;
-import static desugaredlibrary.CustomConversionAsmRewriter.CustomConversionVersion.LEGACY;
+import static com.android.tools.r8.TestBase.transformer;
+import static com.android.tools.r8.desugar.desugaredlibrary.customconversion.CustomConversionAsmRewriteDescription.CONVERT;
+import static com.android.tools.r8.desugar.desugaredlibrary.customconversion.CustomConversionAsmRewriteDescription.WRAP_CONVERT;
 import static org.objectweb.asm.Opcodes.INVOKESTATIC;
 
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.CustomConversionVersion;
+import com.android.tools.r8.transformers.MethodTransformer;
 import com.google.common.io.ByteStreams;
-import desugaredlibrary.AsmRewriter.MethodTransformer;
 import java.io.BufferedOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -27,33 +27,24 @@
 import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;
 
-public class CustomConversionAsmRewriter {
+public class GenerateCustomConversion {
 
-  public enum CustomConversionVersion {
-    LEGACY,
-    LATEST
+  public GenerateCustomConversion(CustomConversionVersion version) {
+    this.version = version;
   }
 
-  public CustomConversionAsmRewriter(CustomConversionVersion legacy) {
-    this.legacy = legacy;
-  }
-
-  private final CustomConversionVersion legacy;
+  private final CustomConversionVersion version;
   private final Map<String, String> wrapConvertOwnerMap =
       CustomConversionAsmRewriteDescription.getWrapConvertOwnerMap();
 
   public static void generateJars(Path jar, Path outputDirectory) throws IOException {
     for (CustomConversionVersion version : CustomConversionVersion.values()) {
-      new CustomConversionAsmRewriter(version).convert(jar, outputDirectory);
+      new GenerateCustomConversion(version).convert(jar, outputDirectory);
     }
   }
 
   private void convert(Path jar, Path outputDirectory) throws IOException {
-    String fileName = jar.getFileName().toString();
-    String newFileName =
-        fileName.substring(0, fileName.length() - "_raw.jar".length())
-            + (legacy == LEGACY ? "_legacy" : "")
-            + ".jar";
+    String newFileName = version.getFileName();
     Path convertedJar = outputDirectory.resolve(newFileName);
     internalConvert(jar, convertedJar);
   }
@@ -64,7 +55,7 @@
     try (ZipOutputStream out =
         new ZipOutputStream(
             new BufferedOutputStream(Files.newOutputStream(convertedJar, options)))) {
-      new CustomConversionAsmRewriter(legacy).convert(jar, out, legacy);
+      new GenerateCustomConversion(version).convert(jar, out, version);
     }
   }
 
@@ -88,7 +79,7 @@
     if (!entry.getName().endsWith(".class")) {
       return;
     }
-    if (legacy == LEGACY
+    if (legacy == CustomConversionVersion.LEGACY
         && (entry.getName().contains("java/nio/file")
             || entry.getName().contains("ApiFlips")
             || entry.getName().contains("java/adapter"))) {
@@ -118,13 +109,15 @@
   }
 
   private byte[] transformInvoke(byte[] bytes) {
-    return AsmRewriter.transformInvoke(bytes, new CustomConversionRewriter(ASM_VERSION));
+    return transformer(bytes, null)
+        .addMethodTransformer(new CustomConversionMethodTransformer())
+        .transform();
   }
 
-  class CustomConversionRewriter extends MethodTransformer {
+  class CustomConversionMethodTransformer extends MethodTransformer {
 
-    protected CustomConversionRewriter(int api) {
-      super(api);
+    protected CustomConversionMethodTransformer() {
+      super();
     }
 
     @Override
@@ -154,6 +147,5 @@
       String newOwner = wrapConvertOwnerMap.get(firstArg);
       super.visitMethodInsn(opcode, newOwner, CONVERT, descriptor, isInterface);
     }
-
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java
new file mode 100644
index 0000000..781a2be
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java
@@ -0,0 +1,110 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.desugar.desugaredlibrary.customconversion;
+
+import static com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase.getAllFilesWithSuffixInDirectory;
+import static com.android.tools.r8.utils.FileUtils.JAVA_EXTENSION;
+import static org.junit.Assert.assertTrue;
+
+import com.android.tools.r8.JavaCompilerTool;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.CustomConversionVersion;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.stream.Stream;
+import java.util.zip.ZipFile;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class GenerateCustomConversionTest extends TestBase {
+
+  private final TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withCfRuntime(CfVm.JDK11).build();
+  }
+
+  public GenerateCustomConversionTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testCustomConversionIsUpToDate() throws IOException {
+    // Regenerate the files in a temp directory.
+    Path customConversionDir = temp.newFolder("custom_conversion").toPath();
+    Files.createDirectories(customConversionDir);
+    generateCustomConversions(customConversionDir);
+
+    for (CustomConversionVersion version : CustomConversionVersion.values()) {
+      // Assert the file is generated.
+      Path newFile = customConversionDir.resolve(version.getFileName());
+      assertTrue(Files.exists(newFile));
+
+      // Assert the file matches the one in third_party.
+      Path thirdPartyFile = ToolHelper.getDesugarLibConversions(version);
+      assertTrue(filesAreEqual(newFile, thirdPartyFile));
+    }
+  }
+
+  private static Path[] extractClasspath(Path customConversionDir) throws IOException {
+    try (Stream<Path> files = Files.walk(customConversionDir)) {
+      return files
+          .filter(
+              path ->
+                  path.toString().endsWith(JAVA_EXTENSION) && !path.toString().startsWith("java"))
+          .toArray(Path[]::new);
+    }
+  }
+
+  private static void generateCustomConversions(Path destinationDir) throws IOException {
+    // Get the sources for the custom conversions.
+    Path customConversionDir = Paths.get(ToolHelper.LIBRARY_DESUGAR_SOURCE_DIR, "java");
+    Path[] sourceFiles =
+        getAllFilesWithSuffixInDirectory(customConversionDir.resolve("java"), JAVA_EXTENSION);
+    assert sourceFiles.length > 0;
+    Path[] classpath = extractClasspath(customConversionDir);
+    assert classpath.length > 0;
+
+    // Generate the raw jar.
+    TemporaryFolder folder =
+        new TemporaryFolder(ToolHelper.isLinux() ? null : Paths.get("build", "tmp").toFile());
+    folder.create();
+    Path compiledClasspath = folder.newFolder().toPath().resolve("classpath.jar");
+    JavaCompilerTool.create(TestRuntime.getCheckedInJdk8(), folder)
+        .addSourceFiles(classpath)
+        .setOutputPath(compiledClasspath)
+        .compile();
+    Path output = folder.newFolder().toPath().resolve("raw.jar");
+    JavaCompilerTool.create(TestRuntime.getCheckedInJdk8(), folder)
+        .addClasspathFiles(compiledClasspath)
+        .addSourceFiles(sourceFiles)
+        .setOutputPath(output)
+        .compile();
+    try (ZipFile file = new ZipFile(output.toFile())) {
+      assert file.size() > 0;
+    }
+
+    // Asm rewrite the jar.
+    GenerateCustomConversion.generateJars(output, destinationDir);
+
+    folder.delete();
+  }
+
+  public static void main(String[] args) throws IOException {
+    generateCustomConversions(Paths.get(ToolHelper.CUSTOM_CONVERSION_DIR));
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
index de43daf..3f70af1 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
@@ -88,8 +88,18 @@
   }
 
   public enum CustomConversionVersion {
-    LEGACY,
-    LATEST
+    LEGACY("library_desugar_conversions_legacy.jar"),
+    LATEST("library_desugar_conversions.jar");
+
+    private final String fileName;
+
+    CustomConversionVersion(String fileName) {
+      this.fileName = fileName;
+    }
+
+    public String getFileName() {
+      return fileName;
+    }
   }
 
   private static Path tempLibraryJdk11UndesugarCache;
diff --git a/third_party/openjdk/custom_conversion.tar.gz.sha1 b/third_party/openjdk/custom_conversion.tar.gz.sha1
new file mode 100644
index 0000000..df8ff0c
--- /dev/null
+++ b/third_party/openjdk/custom_conversion.tar.gz.sha1
@@ -0,0 +1 @@
+61845e2ce51d01eb3f7a4177fdcd9f4a94f3bff0
\ No newline at end of file
diff --git a/tools/archive.py b/tools/archive.py
index 27c3b25..dda7ee2 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -3,11 +3,13 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-import create_maven_release
-import gradle
 import jdk
 import optparse
 import os
+
+import create_maven_release
+import gradle
+
 try:
   import resource
 except ImportError:
@@ -16,10 +18,8 @@
 import shutil
 import subprocess
 import sys
-import toolhelper
 import utils
 import zipfile
-from build_r8lib import build_r8lib
 
 ARCHIVE_BUCKET = 'r8-releases'
 
@@ -165,7 +165,6 @@
           utils.R8LIB_NO_DEPS,
           utils.R8RETRACE,
           utils.R8RETRACE_NO_DEPS,
-          utils.LIBRARY_DESUGAR_CONVERSIONS,
           utils.KEEPANNO_ANNOTATIONS_TARGET,
           '-Pno_internal'
       ])
diff --git a/tools/utils.py b/tools/utils.py
index c737776..b7266ed 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -5,6 +5,7 @@
 # Different utility functions used accross scripts
 
 import hashlib
+import jdk
 import json
 import os
 import re
@@ -16,7 +17,6 @@
 import zipfile
 
 import defines
-import jdk
 from thread_utils import print_thread
 
 ANDROID_JAR_DIR = 'third_party/android_jar/lib-v{api}'
@@ -35,6 +35,8 @@
 BUILD_JAVA_MAIN_DIR = os.path.join(BUILD, 'classes', 'java', 'main')
 BUILD_TEST_DIR = os.path.join(BUILD, 'classes', 'test')
 LIBS = os.path.join(BUILD, 'libs')
+CUSTOM_CONVERSION_DIR = os.path.join(
+    THIRD_PARTY, 'openjdk', 'desugar_jdk_libs', 'custom_conversion')
 GENERATED_LICENSE_DIR = os.path.join(BUILD, 'generatedLicense')
 SRC_ROOT = os.path.join(REPO_ROOT, 'src', 'main', 'java')
 TEST_ROOT = os.path.join(REPO_ROOT, 'src', 'test', 'java')
@@ -47,7 +49,6 @@
 R8RETRACE = 'R8Retrace'
 R8RETRACE_NO_DEPS = 'R8RetraceNoDeps'
 R8_SRC = 'sourceJar'
-LIBRARY_DESUGAR_CONVERSIONS = 'buildLibraryDesugarConversions'
 R8_TESTS_TARGET = 'TestJar'
 R8_TESTS_DEPS_TARGET = 'RepackageTestDeps'
 R8LIB_TESTS_TARGET = 'configureTestForR8Lib'
@@ -70,8 +71,10 @@
 R8LIB_TESTS_DEPS_JAR = R8_TESTS_DEPS_JAR
 MAVEN_ZIP = os.path.join(LIBS, 'r8.zip')
 MAVEN_ZIP_LIB = os.path.join(LIBS, 'r8lib.zip')
-LIBRARY_DESUGAR_CONVERSIONS_LEGACY_ZIP = os.path.join(LIBS, 'library_desugar_conversions_legacy.jar')
-LIBRARY_DESUGAR_CONVERSIONS_ZIP = os.path.join(LIBS, 'library_desugar_conversions.jar')
+LIBRARY_DESUGAR_CONVERSIONS_LEGACY_ZIP = os.path.join(
+    CUSTOM_CONVERSION_DIR, 'library_desugar_conversions_legacy.jar')
+LIBRARY_DESUGAR_CONVERSIONS_ZIP = os.path.join(
+    CUSTOM_CONVERSION_DIR, 'library_desugar_conversions.jar')
 KEEPANNO_ANNOTATIONS_JAR = os.path.join(LIBS, 'keepanno-annotations.jar')
 
 DESUGAR_CONFIGURATION = os.path.join(