Files
kotlin-fork/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2972.kt
T

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()
}
}
}