File tree Expand file tree Collapse file tree 1 file changed +22
-3
lines changed
kotlinx-coroutines-core/jvm/src/internal Expand file tree Collapse file tree 1 file changed +22
-3
lines changed Original file line number Diff line number Diff 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 ) {
You can’t perform that action at this time.
0 commit comments