From 30d2becb0a3de61eb67a89a106572dfabdd457ae Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 9 Oct 2017 13:52:12 +0200 Subject: [PATCH] IDEA-CR-25188 Java implementation of `Files.createDirectories` is broken by design, make our own --- .../src/com/intellij/util/io/path.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/platform/projectModel-api/src/com/intellij/util/io/path.kt b/platform/projectModel-api/src/com/intellij/util/io/path.kt index fb8f57fbee7f..e8ecf744cc4e 100644 --- a/platform/projectModel-api/src/com/intellij/util/io/path.kt +++ b/platform/projectModel-api/src/com/intellij/util/io/path.kt @@ -15,17 +15,20 @@ import java.util.* fun Path.exists() = Files.exists(this) fun Path.createDirectories(): Path { - try { - Files.createDirectories(this) + // symlink or existing regular file - Java SDK do this check, but with as `isDirectory(dir, LinkOption.NOFOLLOW_LINKS)`, i.e. links are not checked + if (!Files.isDirectory(this)) { + doCreateDirectories(toAbsolutePath()) } - catch (e: FileAlreadyExistsException) { - // symlink or existing regular file - Java SDK do this check, but with as `isDirectory(dir, LinkOption.NOFOLLOW_LINKS)`, i.e. links are not checked - if (!Files.isDirectory(this)) { - throw e + return this +} + +private fun doCreateDirectories(path: Path) { + path.parent?.let { + if (!Files.isDirectory(it)) { + doCreateDirectories(it) } } - - return this + Files.createDirectory(path) } /**