15 RFR(XS): 8165276: Spec states that invoke the premain method in an agent class if it's public but implementation differs

Mandy Chung mandy.chung at oracle.com
Mon Jun 29 16:46:21 UTC 2020



On 6/27/20 12:23 AM, Alan Bateman wrote:
> On 27/06/2020 01:40, serguei.spitsyn at oracle.com wrote:
>>
>> The implementation has this order of lookup:
>>
>>         // The agent class must have a premain or agentmain method that
>>         // has 1 or 2 arguments. We check in the following order:
>>         //
>>         // 1) declared with a signature of (String, Instrumentation)
>>         // 2) declared with a signature of (String)
>>         // 3) inherited with a signature of (String, Instrumentation)
>>         // 4) inherited with a signature of (String)
>>
>> The declared methods are gotten with the getDeclaredMethod and 
>> inherited with the getMethod.
>> This works for both 1-arg and 2-arg premain methods, so I'm not sure 
>> what is inconsistent.
>> Or you have a concern there can be a non-nice NoSuchMethodException?
>>
>> In fact, I don't understand why there is a need to use the 
>> getDeclaredMethod.
>> As I see, the getMethod should return a declared method first, and 
>> only if it is absent then it checks for a inherited one.
> The JPLIS agent used getMethod when it was originally created in JDK 5 
> so it would only find public methods. I haven't studied the 
> intervening history too closely but I assume JDK-6289149 (in JDK 7) 
> created the inconsistency between the spec and implementation when it 
> explored the scenario of premain declared in a super class with 
> different arity and/or modifiers to the premain in the sub-class. I 
> assume the tests that you've been forced to change are related to this 
> same issue.
>

Thanks for digging up the history.

> So given where we are, and given the statement "The JVM first attempts 
> to invoke the following method on the agent class" in the spec then I 
> guess it's okay to keep the getDeclaredMethod to deal with "whacky" 
> case where a super class of the agent class has a public premain method.
>

I also think it's okay to get a different exception message in this case.

Serguie - I reviewed this version.  It looks okay.
> New wevrev version is:
> http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/instr-setAccessible.2/

Mandy



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20200629/250104e9/attachment-0001.htm>


More information about the serviceability-dev mailing list