SimpleJavaLibraryBuilder.java: Use MoreFiles.deleteRecursively to clean up directory

Related: https://github.com/bazelbuild/bazel/issues/5907

RELNOTES: None
PiperOrigin-RevId: 209735282
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java
index a90bc06..8f8f4b2 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java
@@ -14,6 +14,8 @@
 
 package com.google.devtools.build.buildjar;
 
+import com.google.common.io.MoreFiles;
+import com.google.common.io.RecursiveDeleteOption;
 import com.google.devtools.build.buildjar.instrumentation.JacocoInstrumentationProcessor;
 import com.google.devtools.build.buildjar.jarhelper.JarCreator;
 import com.google.devtools.build.buildjar.javac.BlazeJavacArguments;
@@ -63,34 +65,16 @@
     if (directory == null) {
       return;
     }
-    if (!Files.exists(directory)) {
-      Files.createDirectories(directory);
-      return;
-    }
-    try {
-      // TODO(b/27069912): handle symlinks
-      Files.walkFileTree(
-          directory,
-          new SimpleFileVisitor<Path>() {
-            @Override
-            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
-                throws IOException {
-              Files.delete(file);
-              return FileVisitResult.CONTINUE;
-            }
 
-            @Override
-            public FileVisitResult postVisitDirectory(Path dir, IOException exc)
-                throws IOException {
-              if (!dir.equals(directory)) {
-                Files.delete(dir);
-              }
-              return FileVisitResult.CONTINUE;
-            }
-          });
-    } catch (IOException e) {
-      throw new IOException("Cannot clean '" + directory + "'", e);
+    if (Files.exists(directory)) {
+      try {
+        MoreFiles.deleteRecursively(directory, RecursiveDeleteOption.ALLOW_INSECURE);
+      } catch (IOException e) {
+        throw new IOException("Cannot clean '" + directory + "'", e);
+      }
     }
+
+    Files.createDirectories(directory);
   }
 
   public void buildGensrcJar(JavaLibraryBuildRequest build) throws IOException {
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
index c090709..db8ec8b 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
@@ -20,6 +20,8 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
+import com.google.common.io.MoreFiles;
+import com.google.common.io.RecursiveDeleteOption;
 import com.google.devtools.build.buildjar.jarhelper.JarCreator;
 import com.google.devtools.build.buildjar.javac.JavacOptions;
 import com.google.devtools.build.buildjar.proto.JavaCompilation.Manifest;
@@ -50,7 +52,6 @@
 import javax.tools.JavaCompiler;
 import javax.tools.JavaCompiler.CompilationTask;
 import javax.tools.JavaFileObject;
-import javax.tools.JavaFileObject.Kind;
 import javax.tools.SimpleJavaFileObject;
 import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
@@ -370,24 +371,7 @@
   private static void createOutputDirectory(Path dir) throws IOException {
     if (Files.exists(dir)) {
       try {
-        // TODO(b/27069912): handle symlinks
-        Files.walkFileTree(
-            dir,
-            new SimpleFileVisitor<Path>() {
-              @Override
-              public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
-                  throws IOException {
-                Files.delete(file);
-                return FileVisitResult.CONTINUE;
-              }
-
-              @Override
-              public FileVisitResult postVisitDirectory(Path dir, IOException exc)
-                  throws IOException {
-                Files.delete(dir);
-                return FileVisitResult.CONTINUE;
-              }
-            });
+        MoreFiles.deleteRecursively(dir, RecursiveDeleteOption.ALLOW_INSECURE);
       } catch (IOException e) {
         throw new IOException("Cannot clean output directory '" + dir + "'", e);
       }
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/instrumentation/JacocoInstrumentationProcessor.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/instrumentation/JacocoInstrumentationProcessor.java
index 995c95d..35f8019 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/instrumentation/JacocoInstrumentationProcessor.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/instrumentation/JacocoInstrumentationProcessor.java
@@ -14,6 +14,8 @@
 
 package com.google.devtools.build.buildjar.instrumentation;
 
+import com.google.common.io.MoreFiles;
+import com.google.common.io.RecursiveDeleteOption;
 import com.google.devtools.build.buildjar.InvalidCommandLineException;
 import com.google.devtools.build.buildjar.JavaLibraryBuildRequest;
 import com.google.devtools.build.buildjar.jarhelper.JarCreator;
@@ -92,7 +94,8 @@
 
   public void cleanup() throws IOException {
     if (Files.exists(instrumentedClassesDirectory)) {
-      recursiveRemove(instrumentedClassesDirectory);
+      MoreFiles.deleteRecursively(
+          instrumentedClassesDirectory, RecursiveDeleteOption.ALLOW_INSECURE);
     }
   }
 
@@ -141,24 +144,4 @@
           }
         });
   }
-
-  // TODO(b/27069912): handle symlinks
-  private static void recursiveRemove(Path path) throws IOException {
-    Files.walkFileTree(
-        path,
-        new SimpleFileVisitor<Path>() {
-          @Override
-          public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
-              throws IOException {
-            Files.delete(file);
-            return FileVisitResult.CONTINUE;
-          }
-
-          @Override
-          public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
-            Files.delete(dir);
-            return FileVisitResult.CONTINUE;
-          }
-        });
-  }
 }