From 291ec072fe24e8677a7fed1ea7b9308b69c542e0 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 13 Feb 2015 18:52:08 +0100 Subject: [PATCH] NIO-based file deletion: returning true if file does not exist --- .../src/com/intellij/openapi/util/io/FileUtilRt.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 28ae363de396..396d39ce2f2b 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 @@ -77,12 +77,14 @@ public class FileUtilRt { private static Method ourFilesWalkMethod; private static Method ourFileToPathMethod; private static Object ourDeletionVisitor; + private static Class ourNoSuchFileExceptionClass; static { boolean initSuccess = false; try { final Class pathClass = Class.forName("java.nio.file.Path"); final Class visitorClass = Class.forName("java.nio.file.FileVisitor"); final Class filesClass = Class.forName("java.nio.file.Files"); + ourNoSuchFileExceptionClass = Class.forName("java.nio.file.NoSuchFileException"); ourFileToPathMethod = Class.forName("java.io.File").getMethod("toPath"); ourFilesWalkMethod = filesClass.getMethod("walkFileTree", pathClass, visitorClass); @@ -140,6 +142,7 @@ public class FileUtilRt { ourFilesWalkMethod = null; ourFilesDeleteIfExistsMethod = null; ourDeletionVisitor = null; + ourNoSuchFileExceptionClass = null; } NIO_FILE_API_AVAILABLE = initSuccess; } @@ -643,6 +646,13 @@ public class FileUtilRt { final Object pathObject = ourFileToPathMethod.invoke(file); ourFilesWalkMethod.invoke(null, pathObject, ourDeletionVisitor); } + catch (InvocationTargetException e) { + final Throwable cause = e.getCause(); + if (cause == null || !ourNoSuchFileExceptionClass.isInstance(cause)) { + LOG.info(e); + return false; + } + } catch (Exception e) { LOG.info(e); return false;