From 4c4aafd2d385c17c002dde0d8fb1408717ea49e1 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Wed, 25 Jan 2012 12:57:00 +0400 Subject: [PATCH] Delete temporary directories on exit --- .../tests/org/jetbrains/jet/JetTestUtils.java | 33 +++++++++++++++---- .../jet/codegen/ForTestCompileStdlib.java | 2 ++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/compiler/tests/org/jetbrains/jet/JetTestUtils.java b/compiler/tests/org/jetbrains/jet/JetTestUtils.java index 3d1dee44547..8ec4ac13b07 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/jet/JetTestUtils.java @@ -2,6 +2,8 @@ package org.jetbrains.jet; import com.google.common.collect.Lists; import com.intellij.openapi.Disposable; +import com.intellij.openapi.util.ShutDownTracker; +import com.intellij.openapi.util.io.FileUtil; import junit.framework.TestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.compiler.JetCoreEnvironment; @@ -19,6 +21,7 @@ import org.jetbrains.jet.util.slicedmap.WritableSlice; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -29,6 +32,8 @@ import java.util.regex.Pattern; * @author abreslav */ public class JetTestUtils { + private static List filesToDelete = new ArrayList(); + public static final BindingTrace DUMMY_TRACE = new BindingTrace() { @@ -162,13 +167,7 @@ public class JetTestUtils { public static void rmrf(File file) { if (file != null) { - File[] children = file.listFiles(); - if (children != null) { - for (File child : children) { - rmrf(child); - } - } - file.delete(); + FileUtil.delete(file); } } @@ -193,6 +192,26 @@ public class JetTestUtils { mkdirs(file); } + public static void deleteOnShutdown(File file) { + if (filesToDelete.isEmpty()) { + ShutDownTracker.getInstance().registerShutdownTask(new Runnable() { + @Override + public void run() { + ShutDownTracker.invokeAndWait(true, true, new Runnable() { + @Override + public void run() { + for (File victim : filesToDelete) { + FileUtil.delete(victim); + } + } + }); + } + }); + } + + filesToDelete.add(file); + } + public static final Pattern FILE_PATTERN = Pattern.compile("//\\s*FILE:\\s*(.*)$", Pattern.MULTILINE); public interface TestFileFactory { F create(String fileName, String text); diff --git a/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java b/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java index b25a3330ea0..8464fd84c72 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java @@ -3,6 +3,7 @@ package org.jetbrains.jet.codegen; import com.google.common.io.Files; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; +import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.cli.KotlinCompiler; import org.junit.Assert; @@ -30,6 +31,7 @@ public class ForTestCompileStdlib { private static File doCompile() throws Exception { File tmpDir = FileUtil.createTempDirectory("stdlibjar", ""); + JetTestUtils.deleteOnShutdown(tmpDir); File jarFile = new File(tmpDir, "stdlib.jar");