From 0e85fdd2cf2ea73c0d2537905f03d119634733da Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 1 Mar 2013 23:28:09 +0400 Subject: [PATCH] KT-3290 File.recurse NPE #KT-3290 fixed --- libraries/stdlib/src/kotlin/io/Files.kt | 5 +++-- libraries/stdlib/test/IoTest.kt | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/libraries/stdlib/src/kotlin/io/Files.kt b/libraries/stdlib/src/kotlin/io/Files.kt index c246bb76856..6061e0d2201 100644 --- a/libraries/stdlib/src/kotlin/io/Files.kt +++ b/libraries/stdlib/src/kotlin/io/Files.kt @@ -12,8 +12,9 @@ import java.net.URL */ public fun File.recurse(block: (File) -> Unit): Unit { block(this) - if (this.isDirectory()) { - for (child in this.listFiles()!!) { + val children = this.listFiles() + if (children != null) { + for (child in children) { child.recurse(block) } } diff --git a/libraries/stdlib/test/IoTest.kt b/libraries/stdlib/test/IoTest.kt index c881be4363b..f85616c6221 100644 --- a/libraries/stdlib/test/IoTest.kt +++ b/libraries/stdlib/test/IoTest.kt @@ -110,4 +110,29 @@ class IoTest(){ assertEquals("", file1.relativePath(file1)) assertEquals(file3.canonicalPath, file1.relativePath(file3)) } + + test fun listFiles() { + val dir = File.createTempFile("temp", System.nanoTime().toString()) + dir.delete() + dir.mkdir() + + File.createTempFile("temp", "1.kt", dir) + File.createTempFile("temp", "2.java", dir) + + val subdir = File(dir, "subdir") + subdir.mkdir() + + File(subdir, "3.txt").createNewFile() + + var totalFiles = 0 + dir.recurse { totalFiles++ } + + assertEquals(5, totalFiles) + + subdir.setReadable(false) + + var totalFilesWithUnReadableDir = 0 + dir.recurse { totalFilesWithUnReadableDir++ } + assertEquals(4, totalFilesWithUnReadableDir) + } }