15 RFR(XS): 8165276: Spec states that invoke the premain method in an agent class if it's public but implementation differs
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Wed Jun 24 19:26:22 UTC 2020
On 6/24/20 05:25, David Holmes wrote:
> On 24/06/2020 8:14 pm, Alan Bateman wrote:
>> On 24/06/2020 10:57, David Holmes wrote:
>>>
>>> But you are ignoring my next statement. If we remove the
>>> setAccessible(true) then the premain method will not be accessible
>>> as Serguei reported.
>>>
>>> Exception in thread "main" java.lang.IllegalAccessException: class
>>> sun.instrument.InstrumentationImpl
>>> (in module java.instrument) cannot access a member of class
>>> SimpleAgent with modifiers "public static"
>>>
>>> I feel we are talking past each other on this issue with regards to
>>> the IllegalAcessError that comes from the module system.
>> This is nothing to do with the module system. If you drop the
>> setAccessible(true) from JDK 6 or JDK 8 then you'll also get
>> IllegalAccessException when the member is not accessible.
>
> Ah! The test class SimpleAgent is what is not public. That seems a bug
> in the test.
There are many such tests.
We can break some of the existing agents by rejecting non-public agent
classes.
I'm inclined to continue using the setAccessible and just add an extra
check for non-public premain/agentmain methods.
Thanks,
Serguei
> Sorry for the confusion.
>
> David
> -----
>
>> I think the main thing that needs to be agreed here is whether to fix
>> the bug or change the spec. My view is that fixing the bug should be
>> low risk because (a) I've never seen an agent with a non-public
>> premain method, and (b) Agents typically have to update or release
>> frequently because of updates to the class file version. So yes, it
>> would be a behavioral compatibility issue taht requires CSR approval
>> and requires follow-up release notes to document the change.
>>
>> -Alan
More information about the serviceability-dev
mailing list