From 7a2332fe3667e4d459af56c8f809dfb2f38d2816 Mon Sep 17 00:00:00 2001 From: Ivan Gavrilovic Date: Fri, 31 May 2019 12:43:12 +0100 Subject: [PATCH] KT-31714: Close files after analysis in incremental KAPT Artifact transform used to analyze classpath was not closing files, which caused java.nio.file.FileSystemException. This commit fixes that, and all input streams are closed after use. Fixes: KT-31714 --- .../internal/kapt/incremental/ClasspathAnalyzer.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt index 4747e3f58eb..ce5c6b80e6b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt @@ -43,7 +43,9 @@ private fun visitDirectory(directory: File): ClasspathEntryData { it.extension == "class" && !it.relativeTo(directory).toString().toLowerCase().startsWith("meta-inf") }.forEach { val internalName = it.relativeTo(directory).invariantSeparatorsPath.dropLast(".class".length) - analyzeInputStream(it.inputStream(), internalName, entryData) + BufferedInputStream(it.inputStream()).use { inputStream -> + analyzeInputStream(inputStream, internalName, entryData) + } } return entryData @@ -58,7 +60,9 @@ private fun visitJar(jar: File): ClasspathEntryData { val entry = entries.nextElement() if (entry.name.endsWith("class") && !entry.name.toLowerCase().startsWith("meta-inf")) { - analyzeInputStream(zipFile.getInputStream(entry), entry.name.dropLast(".class".length), entryData) + BufferedInputStream(zipFile.getInputStream(entry)).use { inputStream -> + analyzeInputStream(inputStream, entry.name.dropLast(".class".length), entryData) + } } } } @@ -69,7 +73,7 @@ private fun visitJar(jar: File): ClasspathEntryData { private fun analyzeInputStream(input: InputStream, internalName: String, entryData: ClasspathEntryData) { val abiExtractor = ClassAbiExtractor(ClassWriter(0)) val typeDependenciesExtractor = ClassTypeExtractorVisitor(abiExtractor) - ClassReader(BufferedInputStream(input).readBytes()).accept( + ClassReader(input.readBytes()).accept( typeDependenciesExtractor, ClassReader.SKIP_CODE or ClassReader.SKIP_DEBUG or ClassReader.SKIP_FRAMES )