29 lines
893 B
Kotlin
Vendored
29 lines
893 B
Kotlin
Vendored
// FIR_IDENTICAL
|
|
//KT-2972 Wrong "unused value" warning when finally is present
|
|
|
|
import java.io.Closeable
|
|
|
|
public inline fun <T: Closeable, R> T.use(block: (T)-> R) : R {
|
|
var closed = false
|
|
try {
|
|
return block(this)
|
|
} catch (e: Exception) {
|
|
closed = true // warning here
|
|
try {
|
|
this.close()
|
|
} catch (closeException: Exception) {
|
|
// eat the closeException as we are already throwing the original cause
|
|
// and we don't want to mask the real exception
|
|
|
|
// TODO on Java 7 we should call
|
|
// e.addSuppressed(closeException)
|
|
// to work like try-with-resources
|
|
// http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html#suppressed-exceptions
|
|
}
|
|
throw e
|
|
} finally {
|
|
if (!closed) {
|
|
this.close()
|
|
}
|
|
}
|
|
} |