I tried compiling OpenGamma via maven and ran into this straight away:

java.lang.VerifyError: class com.google.common.reflect.Element
overrides final method
java.lang.reflect.AccessibleObject.setAccessible(Z)V
        at java.lang.ClassLoader.defineClass1(java.base@9.0/Native Method)
        at java.lang.ClassLoader.defineClass(java.base@9.0/ClassLoader.java:820)
        at 
java.security.SecureClassLoader.defineClass(java.base@9.0/SecureClassLoader.java:152)

The Guava code is:
  @Override public final void setAccessible(boolean flag) throws
SecurityException {
    accessibleObject.setAccessible(flag);
  }

So yes, looking at alternative ways to make that method final is
probably an essential.

Stephen



On 11 September 2015 at 10:33, Alan Bateman <alan.bate...@oracle.com> wrote:
>
> On 11/09/2015 10:21, Jochen Theodorou wrote:
>>
>>
>> the error in Guava is not a failed attempt, it is a VerifyError, because
>> AccessibleObject#setAccessible is now final and
>> com.google.common.reflect.Element overrides the method.
>>
>> As far as I have seen Guava makes a parallel reflective structure of a
>> class to be able to better handle them. A the same time they proxy to their
>> counter parts, but do also implement interfaces like Member. That requires
>> for example to override setAccessible, which will just make the same call on
>> the delegate. I don't see how they can easily fix that without giving up
>> their mirror structure and have it exchangeable with the java reflective
>> classes at the same time. But I am not on the guava team, so they know
>> hopefully better
>
> Okay, I mis-read one of the mails and assumed that setAccessible was failing
> and leading to other errors.
>
> In the current builds then setAccessible is final, and yes, this is an
> incompatible change. The reason for this is that the method is now @CS. I
> think we need to consider changing this so that setAccessible is overridden
> in the final Field, Constructor, and Method classes instead.
>
> -Alan

Reply via email to