Merge commit '0bb618cad3eae2929b265f626ab8e9084660fbef' into dev-release

Change-Id: I7b8e3fbaf454f20266db314689191e354907cd60
diff --git a/infra/config/global/generated/cr-buildbucket.cfg b/infra/config/global/generated/cr-buildbucket.cfg
index 0e4e8a2..35c7e74 100644
--- a/infra/config/global/generated/cr-buildbucket.cfg
+++ b/infra/config/global/generated/cr-buildbucket.cfg
@@ -1092,43 +1092,6 @@
       }
     }
     builders {
-      name: "linux-dex_default-new_gradle"
-      swarming_host: "chrome-swarming.appspot.com"
-      swarming_tags: "vpython:native-python-wrapper"
-      dimensions: "cpu:x86-64"
-      dimensions: "normal:true"
-      dimensions: "os:Ubuntu-20.04"
-      dimensions: "pool:luci.r8.ci"
-      exe {
-        cipd_package: "infra_internal/recipe_bundles/chrome-internal.googlesource.com/chrome/tools/build_limited/scripts/slave"
-        cipd_version: "refs/heads/master"
-        cmd: "luciexe"
-      }
-      properties:
-        '{'
-        '  "builder_group": "internal.client.r8",'
-        '  "recipe": "rex",'
-        '  "test_options": ['
-        '    "--runtimes=dex-default",'
-        '    "--command_cache_dir=/tmp/ccache",'
-        '    "--new-gradle",'
-        '    "--tool=r8",'
-        '    "--no_internal",'
-        '    "--one_line_per_test",'
-        '    "--archive_failures"'
-        '  ]'
-        '}'
-      priority: 26
-      execution_timeout_secs: 21600
-      expiration_secs: 126000
-      build_numbers: YES
-      service_account: "r8-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-    }
-    builders {
       name: "linux-dex_default_release"
       swarming_host: "chrome-swarming.appspot.com"
       swarming_tags: "vpython:native-python-wrapper"
diff --git a/infra/config/global/generated/luci-milo.cfg b/infra/config/global/generated/luci-milo.cfg
index 5421e9b..0f163d5 100644
--- a/infra/config/global/generated/luci-milo.cfg
+++ b/infra/config/global/generated/luci-milo.cfg
@@ -21,11 +21,6 @@
     short_name: "check"
   }
   builders {
-    name: "buildbucket/luci.r8.ci/linux-dex_default-new_gradle"
-    category: "R8"
-    short_name: "new_gradle"
-  }
-  builders {
     name: "buildbucket/luci.r8.ci/linux-dex_default"
     category: "R8"
     short_name: "dex_default"
diff --git a/infra/config/global/generated/luci-notify.cfg b/infra/config/global/generated/luci-notify.cfg
index 26f944f..ff77a2b 100644
--- a/infra/config/global/generated/luci-notify.cfg
+++ b/infra/config/global/generated/luci-notify.cfg
@@ -336,18 +336,6 @@
   }
   builders {
     bucket: "ci"
-    name: "linux-dex_default-new_gradle"
-    repository: "https://r8.googlesource.com/r8"
-  }
-}
-notifiers {
-  notifications {
-    on_failure: true
-    on_new_failure: true
-    notify_blamelist {}
-  }
-  builders {
-    bucket: "ci"
     name: "linux-dex_default_release"
     repository: "https://r8.googlesource.com/r8"
   }
diff --git a/infra/config/global/generated/luci-scheduler.cfg b/infra/config/global/generated/luci-scheduler.cfg
index 9ad6e3f..60c9a25 100644
--- a/infra/config/global/generated/luci-scheduler.cfg
+++ b/infra/config/global/generated/luci-scheduler.cfg
@@ -442,20 +442,6 @@
   }
 }
 job {
-  id: "linux-dex_default-new_gradle"
-  realm: "ci"
-  acl_sets: "ci"
-  triggering_policy {
-    kind: GREEDY_BATCHING
-    max_concurrent_invocations: 1
-  }
-  buildbucket {
-    server: "cr-buildbucket.appspot.com"
-    bucket: "ci"
-    builder: "linux-dex_default-new_gradle"
-  }
-}
-job {
   id: "linux-dex_default_release"
   realm: "ci"
   acl_sets: "ci"
@@ -826,7 +812,6 @@
   triggers: "linux-android-8.1.0"
   triggers: "linux-android-9.0.0"
   triggers: "linux-dex_default"
-  triggers: "linux-dex_default-new_gradle"
   triggers: "linux-internal"
   triggers: "linux-jdk11"
   triggers: "linux-jdk17"
diff --git a/infra/config/global/generated/project.cfg b/infra/config/global/generated/project.cfg
index 755c550..dcf12da 100644
--- a/infra/config/global/generated/project.cfg
+++ b/infra/config/global/generated/project.cfg
@@ -7,7 +7,7 @@
 name: "r8"
 access: "group:all"
 lucicfg {
-  version: "1.39.15"
+  version: "1.39.20"
   package_dir: ".."
   config_dir: "generated"
   entry_point: "main.star"
diff --git a/infra/config/global/main.star b/infra/config/global/main.star
index 86bbec8..11fbd09 100755
--- a/infra/config/global/main.star
+++ b/infra/config/global/main.star
@@ -312,18 +312,6 @@
   expiration_timeout = time.hour * 35,
 )
 
-r8_builder(
-  name = "linux-dex_default-new_gradle",
-  execution_timeout = time.hour * 6,
-  expiration_timeout = time.hour * 35,
-  dimensions = get_dimensions(),
-  max_concurrent_invocations = 1,
-  properties = {
-    "test_options" : ["--runtimes=dex-default", "--command_cache_dir=/tmp/ccache", "--new-gradle"] + common_test_options,
-    "builder_group" : "internal.client.r8"
-  }
-)
-
 r8_tester_with_default("linux-dex_default",
         ["--runtimes=dex-default", "--command_cache_dir=/tmp/ccache"],
         max_concurrent_invocations = 2)
diff --git a/src/main/java/com/android/tools/r8/BackportedMethodList.java b/src/main/java/com/android/tools/r8/BackportedMethodList.java
index bffd580..04c4886 100644
--- a/src/main/java/com/android/tools/r8/BackportedMethodList.java
+++ b/src/main/java/com/android/tools/r8/BackportedMethodList.java
@@ -4,14 +4,11 @@
 
 package com.android.tools.r8;
 
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.desugar.BackportedMethodRewriter;
-import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.lint.DesugaredMethodsList;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.lint.DesugaredMethodsListCommand;
+import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.ExceptionUtils;
-import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.ThreadUtils;
-import java.util.concurrent.ExecutorService;
 
 /**
  * Tool to extract the list of methods which is backported by the D8 and R8 compilers.
@@ -62,13 +59,6 @@
           "  --version               # Print the version of BackportedMethodList.",
           "  --help                  # Print this message.");
 
-  private static String formatMethod(DexMethod method) {
-    return DescriptorUtils.getClassBinaryNameFromDescriptor(method.holder.descriptor.toString())
-        + '#'
-        + method.name
-        + method.proto.toDescriptorString();
-  }
-
   public static void run(BackportedMethodListCommand command) throws CompilationFailedException {
     if (command.isPrintHelp()) {
       System.out.println(USAGE_MESSAGE);
@@ -78,28 +68,25 @@
       System.out.println("BackportedMethodList " + Version.getVersionString());
       return;
     }
-    InternalOptions options = command.getInternalOptions();
+    DesugaredMethodsList.run(convert(command));
+  }
 
-    ExecutorService executorService = ThreadUtils.getExecutorService(options);
-    try {
-      ExceptionUtils.withD8CompilationHandler(
-          command.getReporter(),
-          () -> {
-            BackportedMethodRewriter.generateListOfBackportedMethods(
-                    command.getInputApp(), options, executorService)
-                .stream()
-                .map(BackportedMethodList::formatMethod)
-                .sorted()
-                .forEach(
-                    formattedMethod ->
-                        command
-                            .getBackportedMethodListConsumer()
-                            .accept(formattedMethod, command.getReporter()));
-            command.getBackportedMethodListConsumer().finished(command.getReporter());
-          });
-    } finally {
-      executorService.shutdown();
+  private static DesugaredMethodsListCommand convert(BackportedMethodListCommand command) {
+    DesugaredMethodsListCommand.Builder builder =
+        DesugaredMethodsListCommand.builder(command.getReporter());
+    for (ClassFileResourceProvider libraryResourceProvider :
+        command.getInputApp().getLibraryResourceProviders()) {
+      builder.addLibrary(libraryResourceProvider);
     }
+    String jsonSource = command.getDesugaredLibraryConfiguration().getJsonSource();
+    if (jsonSource != null) {
+      builder.setDesugarLibrarySpecification(
+          StringResource.fromString(jsonSource, Origin.unknown()));
+    }
+    return builder
+        .setMinApi(command.getMinApiLevel())
+        .setOutputConsumer(command.getBackportedMethodListConsumer())
+        .build();
   }
 
   public static void run(String[] args) throws CompilationFailedException {
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index c154471..b77b311 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -35,7 +35,6 @@
   public static final int NO_PC_INFO = -1;
   private static final int NO_LINE_INFO = -1;
 
-  private final AppView<?> appView;
   private final DexEncodedMethod method;
   private final DexItemFactory factory;
   private final InternalOptions options;
@@ -66,7 +65,6 @@
   private int startLine = NO_LINE_INFO;
 
   public DexDebugEventBuilder(AppView<?> appView, IRCode code) {
-    this.appView = appView;
     method = code.context().getDefinition();
     factory = appView.dexItemFactory();
     options = appView.options();
@@ -76,7 +74,7 @@
   }
 
   /** Add events at pc for instruction. */
-  public void add(int pc, int postPc, Instruction instruction, ProgramMethod context) {
+  public void add(int pc, int postPc, Instruction instruction) {
     boolean isBlockEntry = instruction.getBlock().entry() == instruction;
     boolean isBlockExit = instruction.getBlock().exit() == instruction;
 
@@ -98,9 +96,7 @@
       updateLocals(instruction.asDebugLocalsChange());
     } else if (pcAdvancing) {
       if (!position.isNone() && !position.equals(emittedPosition)) {
-        if (options.debug
-            || instruction.instructionInstanceCanThrow(appView, context)
-            || isComposing) {
+        if (options.debug || instruction.instructionTypeCanThrow() || isComposing) {
           emitDebugPosition(pc, position);
         }
       }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 18fc132..3c9c7f3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -261,8 +261,7 @@
         dexInstruction.setOffset(instructionOffset);
         instructionOffset += dexInstruction.getSize();
       }
-      debugEventBuilder.add(
-          instructionStartOffset, instructionOffset, irInstruction, getProgramMethod());
+      debugEventBuilder.add(instructionStartOffset, instructionOffset, irInstruction);
     }
 
     // Workaround dalvik tracing bug, where the dalvik tracing JIT can end up tracing
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 f263c2e..5d6e15c 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
@@ -22,14 +22,7 @@
   // If we increment this api level, we need to verify everything works correctly.
   static final AndroidApiLevel MAX_TESTED_ANDROID_API_LEVEL = AndroidApiLevel.U;
 
-  private final DexItemFactory factory = new DexItemFactory();
-  private final Reporter reporter = new Reporter();
-  final InternalOptions options =
-      new InternalOptions(factory, reporter)
-          .getArtProfileOptions()
-          .setAllowReadingEmptyArtProfileProvidersMultipleTimesForTesting(true)
-          .getOptions();
-
+  final InternalOptions options;
   final DesugaredLibrarySpecification desugaredLibrarySpecification;
   final StringResource desugaredLibrarySpecificationResource;
   final Collection<ProgramResourceProvider> desugaredLibraryImplementation;
@@ -37,11 +30,13 @@
   final Collection<ClassFileResourceProvider> androidJar;
 
   AbstractGenerateFiles(
+      Reporter reporter,
       StringResource desugaredLibrarySpecificationResource,
       Collection<ProgramResourceProvider> desugarImplementation,
       Path output,
       Collection<ClassFileResourceProvider> androidJar) {
     assert androidJar != null;
+    this.options = createOptions(reporter);
     this.desugaredLibrarySpecificationResource = desugaredLibrarySpecificationResource;
     this.androidJar = androidJar;
     this.desugaredLibrarySpecification = readDesugaredLibrarySpecification();
@@ -49,14 +44,21 @@
     this.output = output;
   }
 
+  private InternalOptions createOptions(Reporter reporter) {
+    return new InternalOptions(new DexItemFactory(), reporter)
+        .getArtProfileOptions()
+        .setAllowReadingEmptyArtProfileProvidersMultipleTimesForTesting(true)
+        .getOptions();
+  }
+
   private DesugaredLibrarySpecification readDesugaredLibrarySpecification() {
     if (desugaredLibrarySpecificationResource == null) {
       return MachineDesugaredLibrarySpecification.empty();
     }
     return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
         desugaredLibrarySpecificationResource,
-        factory,
-        reporter,
+        options.dexItemFactory(),
+        options.reporter,
         false,
         AndroidApiLevel.B.getLevel());
   }
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 c2261d4..169dcfe 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
@@ -9,38 +9,43 @@
 import com.android.tools.r8.ArchiveClassFileProvider;
 import com.android.tools.r8.ArchiveProgramResourceProvider;
 import com.android.tools.r8.ClassFileResourceProvider;
+import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.Keep;
 import com.android.tools.r8.ProgramResourceProvider;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.StringResource;
 import com.android.tools.r8.Version;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.ExceptionUtils;
+import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.collect.ImmutableList;
 import java.io.IOException;
 import java.nio.file.Paths;
 import java.util.Collection;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
 
 @Keep
 public class DesugaredMethodsList extends GenerateDesugaredLibraryLintFiles {
 
   private final AndroidApiLevel minApi;
-
   private final StringConsumer outputConsumer;
 
   DesugaredMethodsList(
       int minApi,
+      Reporter reporter,
       StringResource desugarConfiguration,
       Collection<ProgramResourceProvider> desugarImplementation,
       StringConsumer outputConsumer,
       Collection<ClassFileResourceProvider> androidJar) {
-    super(desugarConfiguration, desugarImplementation, null, androidJar);
+    super(reporter, desugarConfiguration, desugarImplementation, null, androidJar);
     this.minApi = AndroidApiLevel.getAndroidApiLevel(minApi);
     this.outputConsumer = outputConsumer;
   }
 
-  public static void run(DesugaredMethodsListCommand command) throws IOException {
+  public static void run(DesugaredMethodsListCommand command) throws CompilationFailedException {
     if (command.isHelp()) {
       System.out.println(DesugaredMethodsListCommand.getUsageMessage());
       return;
@@ -49,13 +54,23 @@
       System.out.println("DesugaredMethodsList " + Version.getVersionString());
       return;
     }
-    new DesugaredMethodsList(
-            command.getMinApi(),
-            command.getDesugarLibrarySpecification(),
-            command.getDesugarLibraryImplementation(),
-            command.getOutputConsumer(),
-            command.getLibrary())
-        .run();
+    ExecutorService executorService = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
+    try {
+      ExceptionUtils.withD8CompilationHandler(
+          command.getReporter(),
+          () -> {
+            new DesugaredMethodsList(
+                    command.getMinApi(),
+                    command.getReporter(),
+                    command.getDesugarLibrarySpecification(),
+                    command.getDesugarLibraryImplementation(),
+                    command.getOutputConsumer(),
+                    command.getLibrary())
+                .run();
+          });
+    } finally {
+      executorService.shutdown();
+    }
   }
 
   @Override
@@ -100,7 +115,7 @@
   public static void main(String[] args) throws Exception {
     if (args.length == 4 || args.length == 5) {
       DesugaredMethodsListCommand.Builder builder =
-          DesugaredMethodsListCommand.builder()
+          DesugaredMethodsListCommand.builder(new Reporter())
               .setMinApi(parseInt(args[0]))
               .setDesugarLibrarySpecification(getSpecificationArg(args[1]))
               .setOutputPath(Paths.get(args[3]));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
index 924a0e6..726d445 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
@@ -15,9 +15,8 @@
 import com.android.tools.r8.ProgramResourceProvider;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.StringResource;
-import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
 import java.io.IOException;
@@ -33,6 +32,8 @@
   private final boolean help;
   private final boolean version;
   private final int minApi;
+
+  private final Reporter reporter;
   private final StringResource desugarLibrarySpecification;
   private final Collection<ProgramResourceProvider> desugarLibraryImplementation;
   private final StringConsumer outputConsumer;
@@ -40,6 +41,7 @@
 
   DesugaredMethodsListCommand(
       int minApi,
+      Reporter reporter,
       StringResource desugarLibrarySpecification,
       Collection<ProgramResourceProvider> desugarLibraryImplementation,
       StringConsumer outputConsumer,
@@ -47,6 +49,7 @@
     this.help = false;
     this.version = false;
     this.minApi = minApi;
+    this.reporter = reporter;
     this.desugarLibrarySpecification = desugarLibrarySpecification;
     this.desugarLibraryImplementation = desugarLibraryImplementation;
     this.outputConsumer = outputConsumer;
@@ -57,6 +60,7 @@
     this.help = help;
     this.version = version;
     this.minApi = -1;
+    this.reporter = null;
     this.desugarLibrarySpecification = null;
     this.desugarLibraryImplementation = null;
     this.outputConsumer = null;
@@ -100,14 +104,19 @@
     return builder.toString();
   }
 
-  public static Builder builder() {
-    return new Builder();
+  public Reporter getReporter() {
+    return reporter;
+  }
+
+  public static Builder builder(DiagnosticsHandler diagnosticsHandler) {
+    return new Builder(diagnosticsHandler);
   }
 
   @Keep
   public static class Builder {
 
     private int minApi = AndroidApiLevel.B.getLevel();
+    private final Reporter reporter;
     private StringResource desugarLibrarySpecification = null;
     private Collection<ProgramResourceProvider> desugarLibraryImplementation = new ArrayList<>();
     private StringConsumer outputConsumer;
@@ -116,6 +125,10 @@
     private boolean help = false;
     private boolean version = false;
 
+    public Builder(DiagnosticsHandler diagnosticsHandler) {
+      this.reporter = new Reporter(diagnosticsHandler);
+    }
+
     public Builder setMinApi(int minApi) {
       this.minApi = minApi;
       return this;
@@ -173,11 +186,11 @@
       }
 
       if (desugarLibrarySpecification != null && library.isEmpty()) {
-        throw new CompilationError("With desugared library configuration a library is required");
+        reporter.error("With desugared library configuration a library is required");
       }
 
       if (!desugarLibraryImplementation.isEmpty() && desugarLibrarySpecification == null) {
-        throw new CompilationError(
+        reporter.error(
             "desugarLibrarySpecification is required when desugared library implementation is"
                 + " present.");
       }
@@ -196,6 +209,7 @@
       }
       return new DesugaredMethodsListCommand(
           minApi,
+          reporter,
           desugarLibrarySpecification,
           desugarLibraryImplementation,
           outputConsumer,
@@ -219,8 +233,9 @@
           .build();
     }
 
-    public DesugaredMethodsListCommand parse(String[] args, Origin origin) throws IOException {
-      DesugaredMethodsListCommand.Builder builder = DesugaredMethodsListCommand.builder();
+    public DesugaredMethodsListCommand parse(String[] args, DiagnosticsHandler handler)
+        throws IOException {
+      DesugaredMethodsListCommand.Builder builder = DesugaredMethodsListCommand.builder(handler);
       for (int i = 0; i < args.length; i += 2) {
         String arg = args[i].trim();
         if (arg.length() == 0) {
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 49d979b..47d7b9f 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
@@ -14,6 +14,7 @@
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
 import java.io.File;
@@ -32,11 +33,12 @@
   private static final boolean FORMAT_WITH_FIELD = true;
 
   public GenerateDesugaredLibraryLintFiles(
+      Reporter reporter,
       StringResource desugarConfiguration,
       Collection<ProgramResourceProvider> desugarImplementation,
       Path output,
       Collection<ClassFileResourceProvider> androidJar) {
-    super(desugarConfiguration, desugarImplementation, output, androidJar);
+    super(reporter, desugarConfiguration, desugarImplementation, output, androidJar);
   }
 
   private String lintBaseFileName(
@@ -175,6 +177,7 @@
   public static void main(String[] args) throws Exception {
     if (args.length == 4) {
       new GenerateDesugaredLibraryLintFiles(
+              new Reporter(),
               StringResource.fromFile(Paths.get(args[0])),
               ImmutableList.of(ArchiveProgramResourceProvider.fromArchive(Paths.get(args[1]))),
               Paths.get(args[2]),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
index 4bc0821..d1394058 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
@@ -23,6 +23,7 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.lint.SupportedClasses.SupportedClass;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
 import java.io.PrintStream;
@@ -50,7 +51,7 @@
       Collection<ProgramResourceProvider> desugarImplementation,
       Path outputDirectory,
       Collection<ClassFileResourceProvider> androidJar) {
-    super(desugarSpecification, desugarImplementation, outputDirectory, androidJar);
+    super(new Reporter(), desugarSpecification, desugarImplementation, outputDirectory, androidJar);
   }
 
   private static class StringBuilderWithIndent {
diff --git a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java
index 9e0f71b..6c16ab7 100644
--- a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java
+++ b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.retrace.internal.PartitionMappingSupplierBase;
-import com.android.tools.r8.retrace.internal.RetracerImpl;
 
 @Keep
 public class PartitionMappingSupplierAsync
@@ -80,7 +79,7 @@
   }
 
   @Override
-  public RetracerImpl createRetracer(
+  public Retracer createRetracer(
       DiagnosticsHandler diagnosticsHandler, MappingPartitionFromKeySupplier supplier) {
     return createRetracerFromPartitionSupplier(diagnosticsHandler, supplier);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
index e07b779..106486b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
@@ -259,6 +259,7 @@
       Path lint = top.resolve("lint_" + spec);
       Files.createDirectories(lint);
       new GenerateDesugaredLibraryLintFiles(
+              new Reporter(),
               StringResource.fromFile(spec.getSpecification()),
               ImmutableList.of(ArchiveProgramResourceProvider.fromArchive(jdkLibJar)),
               lint,
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java b/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
index 07539ed..22c3669 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
@@ -178,4 +178,18 @@
             equalTo("Resource 'META-INF/MANIFEST.MF' already exists."),
             equalTo("Resource 'META-INF/versions/9/module-info.class' already exists.")));
   }
+
+  protected String unresolvedReferenceMessage(KotlinTestParameters param, String ref) {
+    if (param.isKotlinDev()) {
+      return "unresolved reference '" + ref + "'";
+    }
+    return "unresolved reference: " + ref;
+  }
+
+  protected String cannotAccessMessage(KotlinTestParameters param, String ref) {
+    if (param.isKotlinDev()) {
+      return "cannot access 'class " + ref + " : Any'";
+    }
+    return "cannot access '" + ref + "'";
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
index a1fe961..912504e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
@@ -124,7 +124,8 @@
             .disableAssertions()
             .compileRaw();
     assertEquals(1, mainResult.exitCode);
-    assertThat(mainResult.stderr, containsString("cannot access 'LibReference'"));
+    assertThat(
+        mainResult.stderr, containsString(cannotAccessMessage(kotlinParameters, "LibReference")));
   }
 
   private void inspect(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
index 2cdb09a..2ad1340 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
@@ -102,7 +102,9 @@
             .setOutputPath(temp.newFolder().toPath())
             .compileRaw();
     assertNotEquals(0, kotlinTestCompileResult.exitCode);
-    assertThat(kotlinTestCompileResult.stderr, containsString("unresolved reference: join"));
+    assertThat(
+        kotlinTestCompileResult.stderr,
+        containsString(unresolvedReferenceMessage(kotlinParameters, "join")));
   }
 
   private void inspectMerged(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
index e4243c4..42b5af2 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
@@ -163,16 +163,20 @@
 
     assertNotEquals(0, kotlinTestCompileResult.exitCode);
     if (kotlinParameters.isNewerThanOrEqualTo(KotlinCompilerVersion.KOTLINC_1_5_0)) {
-      assertThat(
-          kotlinTestCompileResult.stderr,
-          containsString(
-              "inheritance of sealed classes or interfaces from different module is prohibited"));
+      assertThat(kotlinTestCompileResult.stderr, containsString(sealedClassErrorMessage()));
     } else {
       assertThat(kotlinTestCompileResult.stderr, containsString("cannot access"));
       assertThat(kotlinTestCompileResult.stderr, containsString("private in 'Expr'"));
     }
   }
 
+  private String sealedClassErrorMessage() {
+    if (kotlinParameters.isKotlinDev()) {
+      return "a class can only extend a sealed class or interface declared in the same package";
+    }
+    return "inheritance of sealed classes or interfaces from different module is prohibited";
+  }
+
   private void inspectInvalid(CodeInspector inspector) {
     String exprClassName = PKG + ".sealed_lib.Expr";
     String libClassName = PKG + ".sealed_lib.LibKt";
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
index b5e22d8..a872390 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
@@ -30,6 +30,7 @@
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import java.nio.file.Path;
 import java.util.Collection;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -193,6 +194,7 @@
     KmTypeProjectionSubject expandedArgument = apIs.expandedType().typeArguments().get(0);
     assertThat(expandedArgument.type(), isDexClass(itf.getDexProgramClass()));
 
+    Assume.assumeFalse("TODO(b/303374432)", kotlinParameters.isKotlinDev());
     assertEquals(myAliasedArray.descriptor(packageName), apIs.underlyingType().descriptor());
     assertEquals(1, apIs.underlyingType().typeArguments().size());
     KmTypeProjectionSubject underlyingArgument = apIs.underlyingType().typeArguments().get(0);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java
index cf513eb..36aa493 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java
@@ -107,6 +107,8 @@
             .setOutputPath(temp.newFolder().toPath())
             .compileRaw();
     assertEquals(1, kotlinCompileAppResult.exitCode);
-    assertThat(kotlinCompileAppResult.stderr, containsString("unresolved reference: Password"));
+    assertThat(
+        kotlinCompileAppResult.stderr,
+        containsString(unresolvedReferenceMessage(kotlinParameters, "Password")));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/regress/Regress302826300.java b/src/test/java/com/android/tools/r8/regress/Regress302826300.java
new file mode 100644
index 0000000..f87eb90
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/regress/Regress302826300.java
@@ -0,0 +1,79 @@
+// 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.regress;
+
+import static org.hamcrest.CoreMatchers.containsString;
+
+import com.android.tools.r8.D8TestRunResult;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class Regress302826300 extends TestBase {
+
+  static final String EXPECTED = "foobar";
+
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntimes().withAllApiLevels().build();
+  }
+
+  public Regress302826300(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testD8() throws Exception {
+    D8TestRunResult run =
+        testForD8(parameters.getBackend())
+            // We simply pass LibraryBaseClass as program, but could also compile it separately and
+            // pass as bootclasspath when running.
+            .addProgramClasses(
+                Foo.class, Bar.class, ProgramClassExtendsLibrary.class, LibraryBaseClass.class)
+            // LibraryClass is passed when compiling - but not passed when running
+            .addLibraryClasses(LibraryClass.class)
+            .setMinApi(parameters)
+            .run(parameters.getRuntime(), Foo.class);
+    if (parameters.getRuntime().asDex().getVersion().isDalvik()) {
+      run.assertFailureWithErrorThatMatches(containsString("rejecting opcode 0x6e"));
+    } else {
+      run.assertSuccessWithOutputLines(EXPECTED);
+    }
+  }
+
+  public static class Foo {
+    public static void main(String[] args) {
+      new Bar().x("foobar");
+    }
+  }
+
+  public static class Bar {
+    public void x(ProgramClassExtendsLibrary value) {
+      // To trigger the hard verification error it is important that the invoke virtual is to
+      // a class actually known at runtime - but not the ProgramClassExtendsLibrary which we
+      // don't know so it only triggers a soft verification error.
+      ((LibraryBaseClass) value).z();
+    }
+
+    public void x(String s) {
+      System.out.println(s);
+    }
+  }
+
+  public static class ProgramClassExtendsLibrary extends LibraryClass {}
+
+  public static class LibraryClass extends LibraryBaseClass {}
+
+  public static class LibraryBaseClass {
+    public void z() {
+      System.out.println("z()");
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
index 1afb1c3..3f11198 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
@@ -18,7 +18,6 @@
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import java.io.BufferedReader;
-import java.io.IOException;
 import java.io.StringReader;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -27,11 +26,13 @@
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
+@Ignore("Will be fixed by update in CL 84843")
 @RunWith(Parameterized.class)
 public class TreeShakingSpecificTest extends TestBase {
 
diff --git a/tools/archive.py b/tools/archive.py
index 7beaede..8ec73ea 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -74,35 +74,27 @@
 def GetStorageDestination(storage_prefix,
                           version_or_path,
                           file_name,
-                          is_main,
-                          new_gradle=False):
+                          is_main):
   # We archive main commits under raw/main instead of directly under raw
   version_dir = GetVersionDestination(storage_prefix,
                                       version_or_path,
-                                      is_main,
-                                      new_gradle)
+                                      is_main)
   return '%s/%s' % (version_dir, file_name)
 
-def GetVersionDestination(storage_prefix, version_or_path, is_main,
-                          new_gradle=False):
-  assert new_gradle
+def GetVersionDestination(storage_prefix, version_or_path, is_main):
   archive_dir = 'raw/main' if is_main else 'raw'
-  bucket = ARCHIVE_BUCKET
-  return '%s%s/%s/%s' % (storage_prefix, bucket,
+  return '%s%s/%s/%s' % (storage_prefix, ARCHIVE_BUCKET,
                          archive_dir, version_or_path)
 
-def GetUploadDestination(version_or_path, file_name, is_main,
-                         new_gradle=False):
-  return GetStorageDestination('gs://', version_or_path, file_name, is_main,
-                               new_gradle)
+def GetUploadDestination(version_or_path, file_name, is_main):
+  return GetStorageDestination('gs://', version_or_path, file_name, is_main)
 
-def GetUrl(version_or_path, file_name, is_main, new_gradle=False):
+def GetUrl(version_or_path, file_name, is_main):
   return GetStorageDestination('https://storage.googleapis.com/',
-                               version_or_path, file_name, is_main, new_gradle)
+                               version_or_path, file_name, is_main)
 
-def GetMavenUrl(is_main, new_gradle=False):
-  return GetVersionDestination('https://storage.googleapis.com/', '', is_main,
-                               new_gradle)
+def GetMavenUrl(is_main):
+  return GetVersionDestination('https://storage.googleapis.com/', '', is_main)
 
 def SetRLimitToMax():
   (soft, hard) = resource.getrlimit(resource.RLIMIT_NOFILE)
@@ -116,10 +108,9 @@
 
 def Main():
   (options, args) = ParseOptions()
-  Run(options, True)
+  Run(options)
 
-def Run(options, new_gradle):
-  assert new_gradle
+def Run(options):
   if not utils.is_bot() and not options.dry_run:
     raise Exception('You are not a bot, don\'t archive builds. '
       + 'Use --dry-run to test locally')
@@ -153,49 +144,25 @@
     create_maven_release.generate_r8_maven_zip(
         utils.MAVEN_ZIP_LIB,
         version_file=version_file,
-        skip_gradle_build=options.skip_gradle_build,
-        new_gradle=new_gradle)
-
-
-    # Generate and copy a full build without dependencies.
-    if (not options.skip_gradle_build):
-      if (new_gradle):
-        gradle.RunGradle([':main:swissArmyKnife'], new_gradle=True)
-      else:
-        gradle.RunGradleExcludeDeps([utils.R8, utils.R8_SRC])
-    if (not new_gradle):
-      shutil.copyfile(utils.R8_JAR, utils.R8_FULL_EXCLUDE_DEPS_JAR)
+        skip_gradle_build=options.skip_gradle_build)
 
     # Ensure all archived artifacts has been built before archiving.
     # The target tasks postfixed by 'lib' depend on the actual target task so
     # building it invokes the original task first.
     # The '-Pno_internal' flag is important because we generate the lib based on uses in tests.
     if (not options.skip_gradle_build):
-      if (new_gradle):
-        gradle.RunGradle([
-            ':keepanno:keepAnnoAnnotationsJar',
-            ':main:consolidatedLicense',
-            ':main:r8WithRelocatedDeps',
-            ':main:swissArmyKnife',
-            ':test:r8LibNoDeps',
-            ':test:r8LibWithRelocatedDeps',
-            ':test:retraceNoDeps',
-            ':test:retraceWithRelocatedDeps',
-            ':test:sourcesJar',
-            ':test:sourcesJar',
-            '-Pno_internal'
-        ], new_gradle=True)
-      else:
-        gradle.RunGradle([
-            utils.R8,
-            utils.R8LIB,
-            utils.R8LIB_NO_DEPS,
-            utils.R8RETRACE,
-            utils.R8RETRACE_NO_DEPS,
-            utils.LIBRARY_DESUGAR_CONVERSIONS,
-            utils.KEEPANNO_ANNOTATIONS_TARGET,
-            '-Pno_internal'
-        ])
+      gradle.RunGradle([
+          utils.GRADLE_TASK_CONSOLIDATED_LICENSE,
+          utils.GRADLE_TASK_KEEP_ANNO_JAR,
+          utils.GRADLE_TASK_R8,
+          utils.GRADLE_TASK_R8LIB,
+          utils.GRADLE_TASK_R8LIB_NO_DEPS,
+          utils.GRADLE_TASK_RETRACE,
+          utils.GRADLE_TASK_RETRACE_NO_DEPS,
+          utils.GRADLE_TASK_SOURCE_JAR,
+          utils.GRADLE_TASK_SWISS_ARMY_KNIFE,
+          '-Pno_internal'
+      ], new_gradle=True)
 
     # Create maven release of the desuage_jdk_libs configuration. This require
     # an r8.jar with dependencies to have been built.
@@ -233,7 +200,7 @@
       print('On main, using git hash for archiving')
       version = GetGitHash()
 
-    destination = GetVersionDestination('gs://', version, is_main, new_gradle)
+    destination = GetVersionDestination('gs://', version, is_main)
     if utils.cloud_storage_exists(destination) and not options.dry_run:
       raise Exception('Target archive directory %s already exists' % destination)
 
@@ -273,8 +240,7 @@
       if file_name.endswith('.jar') and not file_name.endswith('-src.jar'):
         with zipfile.ZipFile(tagged_jar, 'a') as zip:
           zip.write(version_file, os.path.basename(version_file))
-      destination = GetUploadDestination(version, file_name, is_main,
-                                         new_gradle=new_gradle)
+      destination = GetUploadDestination(version, file_name, is_main)
       print('Uploading %s to %s' % (tagged_jar, destination))
       if options.dry_run:
         if options.dry_run_output:
@@ -286,24 +252,21 @@
           print('Dry run, not actually uploading')
       else:
         utils.upload_file_to_cloud_storage(tagged_jar, destination)
-        print('File available at: %s' % GetUrl(version, file_name, is_main,
-                                               new_gradle=new_gradle))
+        print('File available at: %s' % GetUrl(version, file_name, is_main))
 
       # Upload R8 to a maven compatible location.
       if file == utils.R8_JAR:
         maven_dst = GetUploadDestination(utils.get_maven_path('r8', version),
-                                         'r8-%s.jar' % version, is_main,
-                                         new_gradle=new_gradle)
+                                         'r8-%s.jar' % version, is_main)
         maven_pom_dst = GetUploadDestination(
             utils.get_maven_path('r8', version),
-            'r8-%s.pom' % version, is_main, new_gradle=new_gradle)
+            'r8-%s.pom' % version, is_main)
         if options.dry_run:
           print('Dry run, not actually creating maven repo for R8')
         else:
           utils.upload_file_to_cloud_storage(tagged_jar, maven_dst)
           utils.upload_file_to_cloud_storage(default_pom_file, maven_pom_dst)
-          print('Maven repo root available at: %s' % GetMavenUrl(
-              is_main, new_gradle=new_gradle))
+          print('Maven repo root available at: %s' % GetMavenUrl(is_main))
 
       # Upload desugar_jdk_libs configuration to a maven compatible location.
       if file == utils.DESUGAR_CONFIGURATION:
@@ -311,8 +274,7 @@
         jar_version_name = 'desugar_jdk_libs_configuration-%s.jar' % version
         maven_dst = GetUploadDestination(
             utils.get_maven_path('desugar_jdk_libs_configuration', version),
-                                 jar_version_name, is_main,
-            new_gradle=new_gradle)
+                                 jar_version_name, is_main)
 
         with utils.TempDir() as tmp_dir:
           desugar_jdk_libs_configuration_jar = os.path.join(tmp_dir,
@@ -333,11 +295,10 @@
           else:
             utils.upload_file_to_cloud_storage(
                 desugar_jdk_libs_configuration_jar, maven_dst)
-            print('Maven repo root available at: %s' % GetMavenUrl(is_main,
-                                                                   new_gradle=new_gradle))
+            print('Maven repo root available at: %s' % GetMavenUrl(is_main))
             # Also archive the jar as non maven destination for Google3
             jar_destination = GetUploadDestination(
-                version, jar_basename, is_main, new_gradle=new_gradle)
+                version, jar_basename, is_main)
             utils.upload_file_to_cloud_storage(
                 desugar_jdk_libs_configuration_jar, jar_destination)
 
@@ -348,8 +309,7 @@
         jar_version_name = 'desugar_jdk_libs_configuration-%s-jdk11-legacy.jar' % version
         maven_dst = GetUploadDestination(
             utils.get_maven_path('desugar_jdk_libs_configuration', version),
-            jar_version_name, is_main,
-            new_gradle=new_gradle)
+            jar_version_name, is_main)
 
         with utils.TempDir() as tmp_dir:
           desugar_jdk_libs_configuration_jar = os.path.join(tmp_dir,
@@ -370,11 +330,10 @@
           else:
             utils.upload_file_to_cloud_storage(
                 desugar_jdk_libs_configuration_jar, maven_dst)
-            print('Maven repo root available at: %s' % GetMavenUrl(
-                is_main, new_gradle=new_gradle))
+            print('Maven repo root available at: %s' % GetMavenUrl(is_main))
             # Also archive the jar as non maven destination for Google3
             jar_destination = GetUploadDestination(
-                version, jar_basename, is_main, new_gradle=new_gradle)
+                version, jar_basename, is_main)
             utils.upload_file_to_cloud_storage(
                 desugar_jdk_libs_configuration_jar, jar_destination)
 
diff --git a/tools/create_maven_release.py b/tools/create_maven_release.py
index f93213a..8079c61 100755
--- a/tools/create_maven_release.py
+++ b/tools/create_maven_release.py
@@ -252,7 +252,7 @@
                           new_gradle=False):
   if not skip_gradle_build:
     if (new_gradle):
-      gradle.RunGradle([':test:r8LibWithRelocatedDeps',
+      gradle.RunGradle([utils.GRADLE_TASK_R8LIB,
                         '-Pno_internal'], new_gradle=True)
     else:
       gradle.RunGradle([utils.R8LIB, '-Pno_internal'])
diff --git a/tools/run_benchmark.py b/tools/run_benchmark.py
index c066678..929a672 100755
--- a/tools/run_benchmark.py
+++ b/tools/run_benchmark.py
@@ -16,8 +16,7 @@
 NONLIB_BUILD_TARGET = 'R8WithRelocatedDeps'
 NONLIB_TEST_BUILD_TARGETS = [utils.R8_TESTS_TARGET, utils.R8_TESTS_DEPS_TARGET]
 
-# TODO(b/300387869): Cleanup targets
-R8LIB_BUILD_TARGET = ':test:r8LibWithRelocatedDeps'
+R8LIB_BUILD_TARGET = utils.GRADLE_TASK_R8LIB
 R8LIB_TEST_BUILD_TARGETS = [utils.R8LIB_TESTS_TARGET, utils.R8LIB_TESTS_DEPS_TARGET]
 
 # The r8lib target is always the golem target.
diff --git a/tools/run_on_app_dump.py b/tools/run_on_app_dump.py
index 8602ea9..feb584d 100755
--- a/tools/run_on_app_dump.py
+++ b/tools/run_on_app_dump.py
@@ -24,8 +24,8 @@
 import utils
 
 # TODO(b/300387869): Cleanup targets
-GOLEM_BUILD_TARGETS = [':test:r8LibWithRelocatedDeps',
-                       ':test:retraceWithRelocatedDeps']
+GOLEM_BUILD_TARGETS = [utils.GRADLE_TASK_R8LIB,
+                       utils.GRADLE_TASK_RETRACE]
 SHRINKERS = ['r8', 'r8-full', 'r8-nolib', 'r8-nolib-full']
 
 class AttrDict(dict):
diff --git a/tools/test.py b/tools/test.py
index 0437701..07adad9 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -205,9 +205,6 @@
   result.add_argument('--kotlin-compiler-old',
                     help='Specify to run tests on older kotlin compilers',
                     default=False, action='store_true')
-  result.add_argument('--new-gradle',
-                    help='Specify to run in the new gradle setup',
-                    default=True, action='store_true')
   return result.parse_known_args()
 
 def has_failures(classes_file):
@@ -244,7 +241,7 @@
 def Main():
   (options, args) = ParseOptions()
   if utils.is_bot():
-    gradle.RunGradle(['--no-daemon', 'clean'], new_gradle=options.new_gradle)
+    gradle.RunGradle(['--no-daemon', 'clean'], new_gradle=True)
     print('Running with python ' + str(sys.version_info))
     # Always print stats on bots if command cache is enabled
     options.command_cache_stats = options.command_cache_dir is not None
@@ -302,7 +299,7 @@
     gradle_args.append('-Pslow_tests=1')
   if options.tool:
     gradle_args.append('-Ptool=%s' % options.tool)
-  if options.one_line_per_test and not options.new_gradle:
+  if options.one_line_per_test:
     gradle_args.append('-Pone_line_per_test')
   if options.test_namespace:
     gradle_args.append('-Ptest_namespace=%s' % options.test_namespace)
@@ -357,14 +354,6 @@
     exit(1)
   if not options.no_r8lib:
     gradle_args.append('-Pr8lib')
-    if options.new_gradle:
-      gradle_args.append(':test:r8LibNoDeps')
-      gradle_args.append(':test:retraceWithRelocatedDeps')
-    else:
-      # Force gradle to build a version of r8lib without dependencies for
-      # BootstrapCurrentEqualityTest.
-      gradle_args.append('R8LibNoDeps')
-      gradle_args.append('R8Retrace')
   if options.r8lib_no_deps:
     gradle_args.append('-Pr8lib_no_deps')
   if options.worktree:
@@ -379,26 +368,18 @@
   if options.no_arttests:
     gradle_args.append('-Pno_arttests=true')
 
-  # Testing state is only supported in new-gradle going forward
-  if options.new_gradle and options.rerun:
+  if options.rerun:
     testing_state.set_up_test_state(gradle_args, options.rerun, options.testing_state_dir)
 
   # Enable completeness testing of ART profile rewriting.
   gradle_args.append('-Part_profile_rewriting_completeness_check=true')
 
   # Build an R8 with dependencies for bootstrapping tests before adding test sources.
-  if options.new_gradle:
-    gradle_args.append(':main:r8WithRelocatedDeps')
-    gradle_args.append(':test:cleanTest')
-    gradle_args.append('test:test')
-    gradle_args.append('--stacktrace')
-    gradle_args.append('-Pprint_full_stacktraces')
-  else:
-    gradle_args.append('r8WithRelocatedDeps')
-    gradle_args.append('r8WithRelocatedDeps17')
-    # Add Gradle tasks
-    gradle_args.append('cleanTest')
-    gradle_args.append('test')
+  gradle_args.append(utils.GRADLE_TASK_R8)
+  gradle_args.append(utils.GRADLE_TASK_CLEAN_TEST)
+  gradle_args.append(utils.GRADLE_TASK_TEST)
+  gradle_args.append('--stacktrace')
+  gradle_args.append('-Pprint_full_stacktraces')
 
   if options.debug_agent:
     gradle_args.append('--debug-jvm')
@@ -476,7 +457,7 @@
       gradle_args.append('-Pruntimes=%s' % ':'.join(runtimes))
 
     return_code = gradle.RunGradle(
-        gradle_args, throw_on_failure=False, new_gradle=options.new_gradle)
+        gradle_args, throw_on_failure=False, new_gradle=True)
     return archive_and_return(return_code, options)
 
   # Legacy testing populates the runtimes based on dex_vm.
@@ -496,7 +477,7 @@
           '-Pruntimes=%s' % ':'.join(runtimes),
         ],
         throw_on_failure=False,
-        new_gradle=options.new_gradle)
+        new_gradle=True)
     if options.generate_golden_files_to:
       sha1 = '%s' % utils.get_HEAD_sha1()
       with utils.ChangedWorkingDirectory(options.generate_golden_files_to):
diff --git a/tools/utils.py b/tools/utils.py
index 4c671b9..4b07b6f 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -42,6 +42,18 @@
 TEST_ROOT = os.path.join(REPO_ROOT, 'src', 'test', 'java')
 REPO_SOURCE = 'https://r8.googlesource.com/r8'
 
+GRADLE_TASK_CLEAN_TEST = ':test:cleanTest'
+GRADLE_TASK_CONSOLIDATED_LICENSE = ':main:consolidatedLicense'
+GRADLE_TASK_KEEP_ANNO_JAR = ':keepanno:keepAnnoAnnotationsJar'
+GRADLE_TASK_R8 = ':main:r8WithRelocatedDeps'
+GRADLE_TASK_R8LIB = ':test:r8LibWithRelocatedDeps'
+GRADLE_TASK_R8LIB_NO_DEPS = ':test:r8LibNoDeps'
+GRADLE_TASK_RETRACE = ':test:retraceWithRelocatedDeps'
+GRADLE_TASK_RETRACE_NO_DEPS = ':test:retraceNoDeps'
+GRADLE_TASK_SOURCE_JAR = ':test:sourcesJar'
+GRADLE_TASK_SWISS_ARMY_KNIFE = ':main:swissArmyKnife'
+GRADLE_TASK_TEST = ':test:test'
+
 D8 = 'd8'
 R8 = 'r8'
 R8LIB = 'r8lib'