Make Closeable.use call addSuppressed

Call addSuppressed when it's provided by the supplementary artifact for jdk7, and only when targeting apiVersion > 1.1

#KT-18961 Fixed
This commit is contained in:
Ilya Gorbunov
2017-09-26 21:00:37 +03:00
parent 3ab7946c4d
commit cc150ca832
3 changed files with 14 additions and 14 deletions
+13 -9
View File
@@ -30,19 +30,23 @@ import kotlin.internal.*
*/
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
var exception: Throwable? = null
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
} catch (e: Throwable) {
exception = e
throw e
} finally {
if (!closed) {
this?.close()
when {
apiVersionIsAtLeast(1, 1, 0) -> this.closeFinally(exception)
this == null -> {}
exception == null -> close()
else ->
try {
close()
} catch (closeException: Throwable) {
// cause.addSuppressed(closeException) // ignored here
}
}
}
}