diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 55a8199..886f985 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -99,7 +99,7 @@
         command.getReporter(),
         () -> {
           try {
-            run(app, options, executor);
+            runInternal(app, options, executor);
           } finally {
             executor.shutdown();
           }
@@ -119,7 +119,7 @@
     ExceptionUtils.withD8CompilationHandler(
         command.getReporter(),
         () -> {
-          run(app, options, executor);
+          runInternal(app, options, executor);
         });
   }
 
@@ -159,7 +159,7 @@
         options.reporter,
         () -> {
           try {
-            run(inputApp, options, executor);
+            runInternal(inputApp, options, executor);
           } finally {
             executor.shutdown();
           }
@@ -190,8 +190,8 @@
     return timing.time("Create app-view", () -> AppView.createForD8(appInfo, typeRewriter, timing));
   }
 
-  private static void run(AndroidApp inputApp, InternalOptions options, ExecutorService executor)
-      throws IOException {
+  private static void runInternal(
+      AndroidApp inputApp, InternalOptions options, ExecutorService executor) throws IOException {
     if (options.printMemory) {
       // Run GC twice to remove objects with finalizers.
       System.gc();
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 6a8d346..76a03cf 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -209,7 +209,7 @@
     ExceptionUtils.withR8CompilationHandler(
         command.getReporter(),
         () -> {
-          run(app, options, executor);
+          runInternal(app, options, executor);
         });
   }
 
@@ -238,16 +238,16 @@
         options.reporter,
         () -> {
           try {
-            run(app, options, executor);
+            runInternal(app, options, executor);
           } finally {
             executor.shutdown();
           }
         });
   }
 
-  private static void run(AndroidApp app, InternalOptions options, ExecutorService executor)
+  private static void runInternal(AndroidApp app, InternalOptions options, ExecutorService executor)
       throws IOException {
-    new R8(options).run(app, executor);
+    new R8(options).runInternal(app, executor);
   }
 
   private static DirectMappedDexApplication getDirectApp(AppView<?> appView) {
@@ -255,7 +255,8 @@
   }
 
   @SuppressWarnings("DefaultCharset")
-  private void run(AndroidApp inputApp, ExecutorService executorService) throws IOException {
+  private void runInternal(AndroidApp inputApp, ExecutorService executorService)
+      throws IOException {
     timing.begin("Run prelude");
     assert options.programConsumer != null;
     if (options.quiet) {
@@ -1268,8 +1269,8 @@
     InternalOptions options = command.getInternalOptions();
     ExecutorService executorService = ThreadUtils.getExecutorService(options);
     try {
-      ExceptionUtils.withR8CompilationHandler(options.reporter, () ->
-          run(command.getInputApp(), options, executorService));
+      ExceptionUtils.withR8CompilationHandler(
+          options.reporter, () -> runInternal(command.getInputApp(), options, executorService));
     } finally {
       executorService.shutdown();
     }
