Working on it.
I just looked at the code and found out that it already has a „fallback“ mechanism: It first tries setAccessible(array, true) and then falls back to do it one by one. I think with Java 9, wenn cannot do this. So I’d change that to: * Get methodhandle in static initializer, if not there set to NULL * In the makeAccessible method check for nullness of methodhandle: if null proceed as before, if not do a for-loop and call trySetAccesible() on all, ignoring return value. ----- Uwe Schindler uschind...@apache.org ASF Member, Apache Lucene PMC / Committer Bremen, Germany http://lucene.apache.org/ From: Cédric Champeau [mailto:cchamp...@apache.org] Sent: Wednesday, July 5, 2017 7:10 PM To: dev@groovy.apache.org Cc: Russel Winder <rus...@winder.org.uk> Subject: Re: trySetAccessible for Java 9 Thanks Uwe, patches/PRs are very welcome :) I did miss your suggestion, sorry I wasn't able to follow everything on this list lately. The risk I saw was that the MethodHandle class wasn't always available, but for 2.4+, it's not a problem! 2017-07-05 19:07 GMT+02:00 Uwe Schindler <uschind...@apache.org <mailto:uschind...@apache.org> >: Hi, I made this suggestion about a month ago! In Lucene/Elasticsearch we do everything with MethodHandles that requires new Java 9 APIs (currently Elasticsearch’s Painless Script engine is the first one that uses indy string concats!). In general I would not use an if/then/else construct at all. Just try to get a MethodHandle to trySetAccessible(), if this fails get a MethodHandle to a local/private method with same signature. Finally you may need to adapt the MethodHandle to the right types and then call it _always_ with correct casting to make javac use correct types. Be sure to make the MethodHandle a static final constant somewhere! This removed the need for a if/then/else on every call. I may provide a patch, if you like. I’d just need some directions where to look at. Should be a 10 liner. Uwe ----- Uwe Schindler uschind...@apache.org <mailto:uschind...@apache.org> ASF Member, Apache Lucene PMC / Committer Bremen, Germany http://lucene.apache.org/ From: Cédric Champeau [mailto:cchamp...@apache.org <mailto:cchamp...@apache.org> ] Sent: Wednesday, July 5, 2017 6:55 PM To: Russel Winder <rus...@winder.org.uk <mailto:rus...@winder.org.uk> > Cc: dev@groovy.apache.org <mailto:dev@groovy.apache.org> Subject: Re: trySetAccessible for Java 9 Actually I'm realizing that the `MethodHandle` API came with Java 7. So we _can_ compile against it. So I guess an option is to have the method handle redirect to `trySetAccessible` if the detected runtime is Java 9, and a backport method if < 9. 2017-07-05 18:41 GMT+02:00 Russel Winder <rus...@winder.org.uk <mailto:rus...@winder.org.uk> >: On Wed, 2017-07-05 at 18:28 +0200, Cédric Champeau wrote: > […] > Any suggestion? How about leave Groovy 2.x as a "can only build on JDK8", and put all effort for a JDK9 build on Groovy 3.x which, as I understand it requires JDK8 as a runtime. This would seem to minimise hassle and maximise forward-looking benefit. Unless I am missing something. -- Russel. ============================================================================= Dr Russel Winder t:+44 20 7585 2200 <tel:%2B44%2020%207585%202200> voip:sip: russel.win...@ekiga.net <mailto:russel.win...@ekiga.net> 41 Buckmaster Road m:+44 7770 465 077 <tel:%2B44%207770%20465%20077> xmpp:rus...@winder.org.uk <mailto:xmpp%3arus...@winder.org.uk> London SW11 1EN, UK w: www.russel.org.uk <http://www.russel.org.uk> skype:russel_winder