The 2.4 branch still supports Java 6+ and believe that 2.5+ is where Java 7 starts as a baseline. The VMPlugin mechanism may be one approach to consider, having it provide a setAccessible(AccessibleObject) method where the Java7 or higher plugins can invoke the MethodHandle if available or fall back to the regular setAccessible call.
On Wed, Jul 5, 2017 at 10:10 AM, Cédric Champeau <cchamp...@apache.org> wrote: > 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>: > >> 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 >> >> 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 6:55 PM >> *To:* Russel Winder <rus...@winder.org.uk> >> *Cc:* 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>: >> >> 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 voip:sip: >> russel.win...@ekiga.net >> 41 Buckmaster Road m:+44 7770 465 077 xmpp:rus...@winder.org.uk >> London SW11 1EN, UK w: www.russel.org.uk skype:russel_winder >> >> >> > >