Reinier I wanted to do a less invasive version of disableCheckedExceptions, however I can not get your initial disableCheckedExceptions to run:
error: Exception thrown while constructing Processor object: java.lang.UnsatisfiedLinkError: Error looking up function 'Agent_OnAttach': javac: undefined symbol: Agent_OnAttach I can see that the annotation processor is being picked up but something obviously misfires on Java 1.6.0_14 64bit Ubuntu. Did you mention something about a JNI call into a native platform library? /Casper On 26 Aug., 20:09, Reinier Zwitserloot <[email protected]> wrote: > lombok's @SneakyThrows is a magical way of throwing checked > exceptions. the lombok proof of concept spinoff > 'disableCheckedExceptions' goes a lot further - though that might be a > bit beyond what you were looking for. > > more info: > > http://projectlombok.org/features/SneakyThrows.html > > http://projectlombok.org/disableCheckedExceptions.html > > On Aug 26, 7:27 pm, Marcelo Fukushima <[email protected]> wrote: > > > but your version has the disadvantage of being visible > > > i (and i hope christian too) was hoping for a more magical way of > > throwing checked exceptions > > > of course you shouldnt use those in an actual app > > > On Wed, Aug 26, 2009 at 5:36 AM, Reinier Zwitserloot<[email protected]> > > wrote: > > > > WTF? I already posted a much better version of this in the > > > supermegauber thread. no need for class file hacking. sun.misc.Unsafe > > > is an even worse idea (Security Manager issues, as well as a > > > dependency on running in sun VMs). > > > > public class SneakyThrow { > > > public static RuntimeException sneakyThrow(Throwable t) { > > > if ( t == null ) throw new NullPointerException("t"); > > > SneakyThrow.<RuntimeException>sneakyThrow0(t); > > > return null; > > > } > > > > �...@suppresswarnings("unchecked") > > > private static <T extends Throwable> void sneakyThrow0(Throwable t) > > > throws T { > > > throw (T)t; > > > } > > > } > > > > Note also how this is much more thought through: Java does not know > > > that calling this method automatically triggers a throw statement, so > > > the compiler will whine that you need to return something, and the DA > > > rules are all messed up. Therefore, the suggested usage is: > > > > public int myMethod() { > > > throw sneakyThrow(new IOException()); > > > } > > > > Note the 'throw' in front of 'sneakyThrow'. If you've read up on your > > > JLS and JVMS, you'll know that this code is perfectly valid java (and, > > > given sun's dogged adherence to backwards compatibility, should mean > > > it'll continue to work just fine), and that it'll work on every java- > > > compatible VM. > > > > On Aug 26, 5:54 am, Christian Catchpole <[email protected]> > > > wrote: > > >> Yeah, i was reading about that one. But it's only in the Sun VMs and > > >> probably subject to change. > > > >> But hey, I just listed this as an exercise. It just shows the > > >> difference between checked and unchecked is one little byte. :) > > > >> On Aug 26, 1:44 pm, Marcelo Fukushima <[email protected]> wrote: > > > >> > theres also a throwException(Throwable) in sun.misc.Unsafe - though to > > >> > use that you really have to want to > > > >> > On Wed, Aug 26, 2009 at 12:30 AM, Christian > > > >> > Catchpole<[email protected]> wrote: > > > >> > > Compile this.. (any package you like, or no package at all) > > > >> > > public class Rethrow { > > >> > > public static void unchecked(Throwable t) { > > >> > > t=t; > > >> > > } > > >> > > } > > > >> > > javap reports the byte code as.. > > > >> > > public static void unchecked(java.lang.Throwable); > > >> > > Code: > > >> > > Stack=1, Locals=1, Args_size=1 > > >> > > 0: aload_0 > > >> > > 1: astore_0 > > >> > > 2: return > > > >> > > which in hex is: > > > >> > > 2A 4B B1 > > > >> > > open the class file in the hex editor, search for that and change it > > >> > > to: > > > >> > > 2A BF B1 > > > >> > > javap now reports the byte code as.. > > > >> > > public static void unchecked(java.lang.Throwable); > > >> > > Code: > > >> > > Stack=1, Locals=1, Args_size=1 > > >> > > 0: aload_0 > > >> > > 1: athrow > > >> > > 2: return > > > >> > > jar that class up or otherwise protect it from re-write. > > > >> > > In your code you can now call this without wrapping with a runtime > > >> > > exception. And the stack trace is still that of the original > > >> > > exception. > > > >> > > } catch(Exception e) { > > >> > > Rethrow.unchecked(e); > > >> > > } > > > >> > > Obviously, use at your own risk. No warrenties etc. :) > > > >> > --http://mapsdev.blogspot.com/ > > >> > Marcelo Takeshi Fukushima > > > --http://mapsdev.blogspot.com/ > > Marcelo Takeshi Fukushima --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "The Java Posse" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/javaposse?hl=en -~----------~----~----~----~------~----~------~--~---
