Hi David, I think you can retain the same exception throwing behavior (plus no casts are required to Field) as before by doing:
try { field = AccessController.doPrivileged(new PriviledgedExceptionAction<Field>() { public Field run() throws NoSuchFieldException { return tclass.getDeclaredField(fieldName); } } } catch (PrivilegedActionException e) { throw (NoSuchFieldException)e.getException(); } Thus avoiding a NoSuchFieldException being nested RuntimeException which is further nested in a RuntimeException. Paul. On Apr 19, 2012, at 1:35 PM, David Holmes wrote: > http://cr.openjdk.java.net/~dholmes/7103570/webrev/ > > Basic fix is to call getDeclaredField() inside a doPrivileged block. > > In addition the call to checkPackageAccess is now conditional - it allows > for, for example, a class in sun.misc to create a field updater for another > class in sun.misc. > > Finally the @throws spec for newUpdater has been expanded to say: > > @throws RuntimeException with a nested reflection-based > exception if the class does not hold field or is the wrong type, > + or the field is inaccessible to the caller according to Java language > + access control > > This last part requires CCC approval which I will initiate. > > I have a glitch with running the test under jtreg but hopefully that will get > sorted soon (jtreg fails if a security manager is installed). > > Thanks, > David Holmes > ------------