From 3f7d533d0a48fd0c21761fcfbb1caa8307354bfe Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 25 Aug 2015 19:21:28 +0300 Subject: [PATCH] use owr own shutdown hook to delete temp folders marked as deleteOnExit --- .../intellij/openapi/util/io/FileUtilRt.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/platform/util-rt/src/com/intellij/openapi/util/io/FileUtilRt.java b/platform/util-rt/src/com/intellij/openapi/util/io/FileUtilRt.java index 457da71ca778..061e263310a6 100644 --- a/platform/util-rt/src/com/intellij/openapi/util/io/FileUtilRt.java +++ b/platform/util-rt/src/com/intellij/openapi/util/io/FileUtilRt.java @@ -32,7 +32,9 @@ import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; +import java.util.Queue; import java.util.UUID; +import java.util.concurrent.ConcurrentLinkedQueue; /** * Stripped-down version of {@code com.intellij.openapi.util.io.FileUtil}. @@ -298,7 +300,9 @@ public class FileUtilRt { boolean deleteOnExit) throws IOException { File file = doCreateTempFile(dir, prefix, suffix, true); if (deleteOnExit) { - file.deleteOnExit(); + //file.deleteOnExit(); + // default deleteOnExit does not remove dirs if they are not empty + FilesToDeleteHolder.ourFilesToDelete.add(file.getPath()); } if (!file.isDirectory()) { throw new IOException("Cannot create directory: " + file); @@ -306,6 +310,25 @@ public class FileUtilRt { return file; } + private static class FilesToDeleteHolder { + public static final Queue ourFilesToDelete = createFilesToDelete(); + + private static Queue createFilesToDelete() { + final ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue(); + Runtime.getRuntime().addShutdownHook(new Thread("FileUtil deleteOnExit") { + @Override + public void run() { + String name = queue.poll(); + while (name != null) { + delete(new File(name)); + name = queue.poll(); + } + } + }); + return queue; + } + } + @NotNull public static File createTempFile(@NotNull @NonNls String prefix, @Nullable @NonNls String suffix) throws IOException { return createTempFile(prefix, suffix, true); // deleteOnExit by default