Groovy with Jigsaw

Alan Bateman Alan.Bateman at oracle.com
Fri Sep 11 07:39:09 UTC 2015


On 10/09/2015 23:57, Uwe Schindler wrote:
> :
>
> I also wanted to ask the question: setAccessible() already throws some checked exceptions, why invent a new one that’s no longer checked? Could it not simply be one already there - one of the checked ones - or a new one just subclassing ReflectiveOperationException? This is completely inconsistent to other core reflection APIs. Why have a totally unexpected new one?
>
>
Right, there is compatibility issue here (third item in the "Risks and 
Assumptions" section of JEP 261 [1]).

The setAccessible methods don't declare any checked exceptions. The only 
exception they declare is SecurityException. This exception make sense 
when running with a security manager and the specified permission check 
fails. This exception is the wrong exception to fail with when the 
member is not an an exported package as this is nothing to do with the 
security manager. Sadly, these methods do throw SecurityException when 
attempted on a constructor of java.lang.Class, I've been trying to dig 
into the history on this oddity.

Anyway, retrofitting these methods to throw ReflectiveOperationException 
(or sub-type) isn't really an option because this is a checked exception 
so it would add a source compatibility issue to the list. For now, the 
prototype API changes these methods to throw InaccessibleObjectException 
and we'll have to see the impact of this. I hope we aren't force to 
change this to throw SecurityException as it's the wrong exception, but 
less impact compatibility-wise because there is some chance that 
existing code might handle that already.

-Alan.

[1] http://openjdk.java.net/jeps/261


More information about the jigsaw-dev mailing list