| // RUN_PIPELINE_TILL: BACKEND |
| // 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() |
| } |
| } |
| } |
| |
| /* GENERATED_FIR_TAGS: assignment, funWithExtensionReceiver, functionDeclaration, functionalType, ifExpression, inline, |
| javaFunction, localProperty, nullableType, propertyDeclaration, thisExpression, tryExpression, typeConstraint, |
| typeParameter */ |