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
Sat Jun 27 00:40:52 UTC 2020
On 6/25/20 11:07, Alan Bateman wrote:
> On 25/06/2020 17:17, serguei.spitsyn at oracle.com wrote:
>>
>> New wevrev version is:
>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/instr-setAccessible.2/
>>
> One inconsistency is that it uses getDeclaredMethod to find the 2-arg
> premain and getMethod to find the 1-arg premain. The latter will fail
> if the method is not public so you won't get the nice exception
> message. I wonder if we could fix this at the same time.
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.
Thanks,
Serguei
>
> -Alan.
More information about the serviceability-dev
mailing list