Groovy with Jigsaw
Uwe Schindler
uschindler at apache.org
Thu Sep 10 22:57:31 UTC 2015
Hi,
> Now a more practical one... In Groovy we have code like this:
>
> try {
> AccessController.doPrivileged(new PrivilegedAction() {
> public Object run() {
> c.setAccessible(true);
> return null;
> }
> });
> }
> catch (SecurityException e) {
> // IGNORE
> }
>
> which is code supposed to "check" if we can access the class member or if
> any security manager will disallow this. In this case the method becomes
> unavailable for invocation... Now jigsaw changes do make the setAccessible
> method also throws java.lang.reflect.InaccessibleObjectException. What is
> the suggested way to handle this for code that has to be also compatible to
> pre JDK9 code?
> catch RuntimeException, check the class name and rethrow if the name does
> not fit?
I already opened an issue about this: https://issues.apache.org/jira/browse/GROOVY-7587
This makes Groovy unuseable at the moment with JIGSAW. Elasticsearch is affected by this, but also the Ant-based build scripts used to build Lucene and Forbiddenapis (both use Groovy from Ant). I think the only "quick" fix would be to check RuntimeException, check class type, otherwise rethrow.
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?
Uwe
-----
Uwe Schindler
uschindler at apache.org
ASF Member, Apache Lucene PMC / Committer
Bremen, Germany
http://lucene.apache.org/
More information about the jigsaw-dev
mailing list