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
This commit is contained in:
committed by
Yan Zhulanow
parent
695f202e46
commit
7a2332fe36
+7
-3
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user