diff options
author | Colin Cross <ccross@google.com> | 2017-02-23 01:44:09 +0000 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2017-02-23 10:04:29 -0800 |
commit | 90d5d5ca6672380b7a5ede3c240b2676b226818f (patch) | |
tree | cd9c91334500e9e1c609bbfe02738019761571fd | |
parent | 758d2b7ce3ae079c8308c7f1fb9e740cb704f25e (diff) | |
download | desugar-90d5d5ca6672380b7a5ede3c240b2676b226818f.tar.gz |
roll-forward of "Delete temporary directory on exit"
*** Reason for rollback ***
Bazel build is fixed by making fields referenced from inner class final. Clean reapply of commit 9a05f3bc58f9845bf41f9f8031e97b09e5348855 with "Path directory" arguments changed to "final Path directory".
*** Original change description ***
Revert "Delete temporary directory on exit"
This reverts commit 9a05f3bc58f9845bf41f9f8031e97b09e5348855.
This change breaks Bazel:
http://ci.bazel.io/job/bazel-tests/555/BAZEL_VERSION=HEAD,PLATFORM_NAME=windows-x86_64/console
Fixes #2552
--
PiperOrigin-RevId: 148293996
MOS_MIGRATED_REVID=148293996
GitOrigin-RevId: c9333b4996679c7f7120ff6dad087790b34908f6
Change-Id: I0eb3b59a25524e0e2dc1869da212861cdd8d3951
-rw-r--r-- | java/com/google/devtools/build/android/desugar/Desugar.java | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/java/com/google/devtools/build/android/desugar/Desugar.java b/java/com/google/devtools/build/android/desugar/Desugar.java index 9fdd829..2d973de 100644 --- a/java/com/google/devtools/build/android/desugar/Desugar.java +++ b/java/com/google/devtools/build/android/desugar/Desugar.java @@ -27,9 +27,12 @@ import com.google.devtools.common.options.OptionsParser; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.Enumeration; import java.util.List; import java.util.Map; @@ -124,6 +127,8 @@ class Desugar { System.setProperty( LambdaClassMaker.LAMBDA_METAFACTORY_DUMPER_PROPERTY, dumpDirectory.toString()); + deleteTreeOnExit(dumpDirectory); + if (args.length == 1 && args[0].startsWith("@")) { args = Files.readAllLines(Paths.get(args[0].substring(1)), ISO_8859_1).toArray(new String[0]); } @@ -288,4 +293,42 @@ class Desugar { throw new ClassNotFoundException(); } } + + private static void deleteTreeOnExit(final Path directory) { + Thread shutdownHook = + new Thread() { + @Override + public void run() { + try { + deleteTree(directory); + } catch (IOException e) { + throw new RuntimeException("Failed to delete " + directory, e); + } + } + }; + Runtime.getRuntime().addShutdownHook(shutdownHook); + } + + /** Recursively delete a directory. */ + private static void deleteTree(final Path directory) throws IOException { + if (directory.toFile().exists()) { + 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 { + Files.delete(dir); + return FileVisitResult.CONTINUE; + } + }); + } + } } |