Skip to content

Commit d15d8d6

Browse files
committed
Make FastServiceLoader compatible with Java 1.6
1 parent e2a5671 commit d15d8d6

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

kotlinx-coroutines-core/jvm/src/internal/FastServiceLoader.kt

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,37 @@ internal object FastServiceLoader {
5252
val pathToJar = path.substringAfter("jar:file:").substringBefore('!')
5353
val entry = path.substringAfter("!/")
5454
// mind the verify = false flag!
55-
(JarFile(pathToJar, false) as Closeable).use { file ->
56-
BufferedReader(InputStreamReader((file as JarFile).getInputStream(ZipEntry(entry)), "UTF-8")).use { r ->
55+
(JarFile(pathToJar, false)).use { file ->
56+
BufferedReader(InputStreamReader(file.getInputStream(ZipEntry(entry)), "UTF-8")).use { r ->
5757
return parseFile(r)
5858
}
5959
}
6060
}
61-
// Regular path for everything elese
61+
// Regular path for everything else
6262
return BufferedReader(InputStreamReader(url.openStream())).use { reader ->
6363
parseFile(reader)
6464
}
6565
}
6666

67+
// JarFile does no implement Closesable on Java 1.6
68+
private inline fun <R> JarFile.use(block: (JarFile) -> R): R {
69+
var cause: Throwable? = null
70+
try {
71+
return block(this)
72+
} catch (e: Throwable) {
73+
cause = e
74+
throw e
75+
} finally {
76+
try {
77+
close()
78+
} catch (closeException: Throwable) {
79+
if (cause === null) throw closeException
80+
cause.addSuppressed(closeException)
81+
throw cause
82+
}
83+
}
84+
}
85+
6786
private fun parseFile(r: BufferedReader): List<String> {
6887
val names = mutableSetOf<String>()
6988
while (true) {

0 commit comments

Comments
 (0)