Sounds good to me.
2013/10/30 Damjan Jovanovic <damjan....@gmail.com> > For the sake of similarity of 1.0 with 0.x versions, I've stayed with Java > 1.5 and in commit 1537238 I've gone with the set flag on every successful > return path + closeQuietly() idea. > > It was a mission and broke things (DeflaterOutputStream apparently doesn't > honor flush()). I am moving Imaging to Java 7 as soon as 1.0 is released. > > Damjan > > > On Sun, Oct 27, 2013 at 8:32 PM, Gary Gregory <garydgreg...@gmail.com > >wrote: > > > On Sun, Oct 27, 2013 at 1:51 AM, Damjan Jovanovic <damjan....@gmail.com > > >wrote: > > > > > an > > > > > > On Fri, Oct 25, 2013 at 5:24 PM, Jörg Schaible <joerg.schai...@gmx.de> > > > wrote: > > > > Hi Damjan, > > > > > > > > Damjan Jovanovic wrote: > > > > > > > >> On Fri, Oct 25, 2013 at 12:36 PM, Jörg Schaible > > > >> <joerg.schai...@scalaris.com> wrote: > > > >>> Hi Damjan, > > > >>> > > > >>> Damjan Jovanovic wrote: > > > >>> > > > >>> [snip] > > > >>> > > > >>> Thanks for explanation. > > > >>> > > > >>>> We would be able to adapt that for Java < 1.7 by swallowing the > > close > > > >>>> exception instead of calling addSuppressed() on the primary > > exception, > > > >>>> but the show stopper is catching and rethrowing the primary > > exception > > > >>>> (Throwable), which javac < 1.7 refuses to compile because it > doesn't > > > >>>> do "Rethrowing Exceptions with More Inclusive Type Checking" > > > >>>> ( > > > > > > http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html > > > ). > > > >>>> > > > >>>> But this would work and always sets succeeded correctly without > > > >>>> catch/re-throw: > > > >>>> > > > >>>> final InputStream is = factoryMethodThatCanThrow(); > > > >>>> boolean succeeded = false; > > > >>>> try { > > > >>>> try { > > > >>>> is.methodThatCanThrow(); > > > >>>> } finally { > > > >>>> } > > > >>>> succeeded = true; > > > >>>> } finally { > > > >>>> closeSafely(!succeeded, is); > > > >>>> } > > > >>> > > > >>> I guess the nested try was unintentionally ;-) > > > >>> > > > >>> Cheers, > > > >>> Jörg > > > >> > > > >> Well that actually won't work, because the "succeeded = true;" will > be > > > >> skipped if there is a "return;" in the inner try. > > > > > > > > Well, but this has to be done in our code, so we can either change it > > or > > > set > > > > "succedded = true" before the return as well. > > > > > > > > To mimic Java 7, we could also implement: > > > > > > > > ============= %< =============== > > > > Throwable t = null; > > > > try { > > > > } (catch IOException e) { t = e; throw e; } > > > > // ... another line for each checked exception > > > > } (catch RuntimeException e) { t = e; throw e; } > > > > } (catch Error e) { t = e; throw e; } > > > > } finally { > > > > closeSafely(t != null, is); > > > > } > > > > ============= %< =============== > > > > > > > > but as commented, we have to add a catch for every checked exception, > > > > anotehr one for RuntimeException and one for Error. The approach with > > the > > > > succeeded flag seems easier ... > > > > > > > >> Other than a custom Java compiler, I guess there's no clean way of > > > >> doing this in Java < 1.7. There's really only option 2 - with being > > > >> careful to always set succeeded correctly on all paths out of the > try > > > >> block. Almost like releasing memory in C. > > > > > > > > Yep. > > > > > > > > Cheers, > > > > Jörg > > > > > > > > > > One thing that amuses me to no end, is that while it's at least a > > > solved problem in Java 7, exceptions thrown from C#'s Dispose() method > > > in a using() block always swallow the original exception, just like an > > > uncaught close() exception in Java's finally :) > > > ( > > > > > > http://blogs.infosupport.com/the-c-using-statement-and-suppressed-exceptions-compared-to-java-7-try-with/ > > > ). > > > > > > Anyway I now think the way forward is Java 7. Java 5 was EOL since 3 > > > November 2009, and Java 6 was EOL since February 2013 (with a last > > > update on 6 March 2013). There are ways of getting Java 7 features > > > like try-with-resources on Android > > > (https://github.com/yareally/Java7-on-Android) and besides Imaging's > > > use of java.awt.* packages is a bigger barrier there. Applications and > > > JVMs will eventually support Java 7 anyway, and even if they don't, a > > > special compiler could produce binaries for earlier versions of Java. > > > > > > Can I just go change the POM to Java 7 or do we need a vote? > > > > > > > I do not think you need a vote. Since the 0.x version is used in the > wild, > > you might want to poll the user base as to their JRE requirements. > > > > For me, moving to Java 6 is fine. Java 7 is a little more adventurous, a > > good thing in general since no [commons] component has made Java 7 a > > minimum yet. Might as well test the waters. > > > > Gary > > > > > > > > > > > > Damjan > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > > For additional commands, e-mail: dev-h...@commons.apache.org > > > > > > > > > > > > -- > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > Java Persistence with Hibernate, Second Edition< > > http://www.manning.com/bauer3/> > > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > > Spring Batch in Action <http://www.manning.com/templier/> > > Blog: http://garygregory.wordpress.com > > Home: http://garygregory.com/ > > Tweet! http://twitter.com/GaryGregory > > > -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter