Here is my quick patch:

 
<https://github.com/apache/groovy/compare/master...uschindler:java9/trySetAccessible>
 
https://github.com/apache/groovy/compare/master...uschindler:java9/trySetAccessible

 

Sorry for my ignorance, but how to run tests with Java 9? Gradle fails for me 
to launch daemon!

 

Uwe

 

-----

Uwe Schindler

[email protected] 

ASF Member, Apache Lucene PMC / Committer

Bremen, Germany

http://lucene.apache.org/

 

From: Uwe Schindler [mailto:[email protected]] 
Sent: Wednesday, July 5, 2017 7:27 PM
To: [email protected]; [email protected]
Subject: RE: trySetAccessible for Java 9

 

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

[email protected] <mailto:[email protected]>  

ASF Member, Apache Lucene PMC / Committer

Bremen, Germany

http://lucene.apache.org/

 

From: Cédric Champeau [mailto:[email protected]] 
Sent: Wednesday, July 5, 2017 7:10 PM
To: [email protected] <mailto:[email protected]> 
Cc: Russel Winder <[email protected] <mailto:[email protected]> >
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 <[email protected] 
<mailto:[email protected]> >:

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

[email protected] <mailto:[email protected]>  

ASF Member, Apache Lucene PMC / Committer

Bremen, Germany

http://lucene.apache.org/

 

From: Cédric Champeau [mailto:[email protected] 
<mailto:[email protected]> ] 
Sent: Wednesday, July 5, 2017 6:55 PM
To: Russel Winder <[email protected] <mailto:[email protected]> >
Cc: [email protected] <mailto:[email protected]> 
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 <[email protected] 
<mailto:[email protected]> >:

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:
[email protected] <mailto:[email protected]> 
41 Buckmaster Road   m:+44 7770 465 077 <tel:%2B44%207770%20465%20077>    
xmpp:[email protected] <mailto:xmpp%[email protected]> 
London SW11 1EN, UK  w: www.russel.org.uk <http://www.russel.org.uk>  
skype:russel_winder

 

 

Reply via email to