From 79049ca2e23d8d7b788635ab61f76022629d59ae Mon Sep 17 00:00:00 2001 From: James Strachan Date: Wed, 4 Jan 2012 16:50:25 +0000 Subject: [PATCH] avoid double close and added TODO about supporting http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html#suppressed-exceptions --- stdlib/ktSrc/JavaIo.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stdlib/ktSrc/JavaIo.kt b/stdlib/ktSrc/JavaIo.kt index 432e2678dad..13bb82482a2 100644 --- a/stdlib/ktSrc/JavaIo.kt +++ b/stdlib/ktSrc/JavaIo.kt @@ -72,11 +72,17 @@ inline fun T.foreach(block: (T)-> R) : R { try { return block(this) } catch (e: Exception) { + closed = true 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 {