From 2271eaf318b3b325d4d2bb09a5046151aa502fee Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 9 Oct 2013 13:43:18 +0200 Subject: [PATCH] IDEA-114633 (symlink deletion regression fixed) --- .../documentation/RefConvertorsTest.java | 12 ++++++------ .../intellij/openapi/util/io/FileUtilRt.java | 18 +++++++----------- .../com/intellij/openapi/util/io/FileUtil.java | 7 ++++++- .../openapi/util/io/FileUtilHeavyTest.java | 13 +++++++++++++ 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/documentation/RefConvertorsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/documentation/RefConvertorsTest.java index f5bd537a6788..87a32c47f3b2 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/documentation/RefConvertorsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/documentation/RefConvertorsTest.java @@ -35,7 +35,7 @@ import java.util.jar.JarOutputStream; * @since 1/15/13 7:26 PM */ public class RefConvertorsTest extends LightCodeInsightTestCase { - + private File myExtractedImagesDir; @Override @@ -47,7 +47,7 @@ public class RefConvertorsTest extends LightCodeInsightTestCase { @Override protected void tearDown() throws Exception { - FileUtilRt.delete(myExtractedImagesDir); + FileUtil.delete(myExtractedImagesDir); super.tearDown(); } @@ -71,13 +71,13 @@ public class RefConvertorsTest extends LightCodeInsightTestCase { finally { out.close(); } - - String textBefore = + + String textBefore = "" + "java.lang.Object\n" + " \"extendedorg.bouncycastle.asn1.BERSequenceParser\n" + ""; - + File f = new File(myExtractedImagesDir, imgJarName); f = new File(f, "resources"); File extractedImgFile = new File(f, "inherit.gif"); @@ -88,7 +88,7 @@ public class RefConvertorsTest extends LightCodeInsightTestCase { "", LocalFileSystem.PROTOCOL_PREFIX, extractedImgFile.getAbsolutePath()); - + JavaDocExternalFilter filter = new JavaDocExternalFilter(getProject()); String textAfter = filter.correctRefs( String.format("%s%s!/org/bouncycastle/asn1/BERSequenceParser.html", JarFileSystem.PROTOCOL_PREFIX, imgJar.getAbsolutePath()), 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 3e8395d82c8c..d63c9bca7f48 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 @@ -444,19 +444,15 @@ public class FileUtilRt { public static boolean delete(@NotNull File file) { if (file.isDirectory()) { - if (!deleteChildren(file)) return false; - } - return deleteFile(file); - } - - protected static boolean deleteChildren(@NotNull File file) { - File[] files = file.listFiles(); - if (files != null) { - for (File child : files) { - if (!delete(child)) return false; + File[] files = file.listFiles(); + if (files != null) { + for (File child : files) { + if (!delete(child)) return false; + } } } - return true; + + return deleteFile(file); } public interface RepeatableIOOperation { diff --git a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java index 8a01096b0aeb..cd3668c73250 100644 --- a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java +++ b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java @@ -417,7 +417,12 @@ public class FileUtil extends FileUtilRt { if (attributes == null) return true; if (attributes.isDirectory() && !attributes.isSymLink()) { - if (!deleteChildren(file)) return false; + File[] files = file.listFiles(); + if (files != null) { + for (File child : files) { + if (!delete(child)) return false; + } + } } return deleteFile(file); diff --git a/platform/util/testSrc/com/intellij/openapi/util/io/FileUtilHeavyTest.java b/platform/util/testSrc/com/intellij/openapi/util/io/FileUtilHeavyTest.java index 9a694b5d1784..00c9d4c24011 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/io/FileUtilHeavyTest.java +++ b/platform/util/testSrc/com/intellij/openapi/util/io/FileUtilHeavyTest.java @@ -210,4 +210,17 @@ public class FileUtilHeavyTest { FileUtilRt.doIOOperation(lastShot); assertEquals(10, lastShot.count); } + + @Test + public void testSymlinkDeletion() throws Exception { + File targetDir = IoTestUtil.createTestDir(myTempDirectory, "link_del_test_1"); + IoTestUtil.createTestFile(targetDir, "file"); + File linkDir = IoTestUtil.createTestDir(myTempDirectory, "link_del_test_2"); + IoTestUtil.createTestFile(linkDir, "file"); + IoTestUtil.createSymLink(targetDir.getPath(), linkDir.getPath() + "/link"); + + assertEquals(1, targetDir.list().length); + FileUtil.delete(linkDir); + assertEquals(1, targetDir.list().length); + } }