Review Request JDK-8186050: StackFrame should provide the method signature
brent.christian at oracle.com
Tue Aug 29 18:23:34 UTC 2017
For providing something informational, option #3 is a good choice.
It's simple (no need for new StackWalker access options), yet sufficient.
The changes look good to me.
On 08/28/2017 07:37 PM, mandy chung wrote:
> On 8/28/17 4:23 PM, Paul Sandoz wrote:
>> Hi Mandy,
>> MethodType::fromMethodDescriptorString (and the three arg
>> Class.forName) requires that a class loader be supplied. Perhaps for
>> the thing consuming StackWalker it’s not possible to reproduce a
>> MethodType (or components of) from the descriptor string
> The class loader can be obtained from
>> much like it may not possible to reproduce the declaring class from
>> the class name string, hence the need for RETAIN_CLASS_REFERENCE?
> Right and also security permission check can be performed once when
> getting StackWalker instance. No security permission check is performed
> for each StackFrame::getDeclaringClass for better performance.
>> If i understand you correctly i think you are saying the method
>> descriptor is more useful for informational (logging say) purposes?
> Yes for completeness since the method signature is currently unavailable.
>>> On 28 Aug 2017, at 15:57, mandy chung <mandy.chung at oracle.com> wrote:
>>> Method signature is missing in the StackFrame API. This proposes to
>>> add StackFrame::getMethodDescriptor method to return the method
>>> descriptor in a stack frame.
>>> Webrev at:
>>> There are a couple options how to present the method signature in the
>>> API level:
>>> 1. Class<?> getParameterTypes() and Class<?> getReturnTypes()
>>> similiar to what java.lang.reflect.Method has.
>>> 2. java.lang.invoke.MethodType
>>> 3. a String representation (i) comma-separated list of the method's
>>> formal parameter types (ii) bytecode method descriptor as specified
>>> in JVMS
>>> Returning Class<?> instance should require to add a new StackWalker
>>> option to access to the parameter types and return type for option #1
>>> and #2. StackFrame::getDeclaringClass requires the stack walker to
>>> have the RETAIN_CLASS_REFERENCE capability.
>>> Option #2 returning MethodType is handy while java.lang would
>>> reference a type in java.lang.invoke.
>>> Option #3 requires the caller to parse the return string and call
>>> Class.forName to get the Class<?> instance. OTOH
>>> MethodType::fromMethodDescriptorString method that returns
>>> MethodType from a bytecode method descriptor string.
>>> Method signature is for information for typical cases. Getting
>>> Class<?> for the parameter types and return type would be a niche
>>> case. I think returning the method descriptor string is a good option
>>> - keep the API simple and can use
>>> MethodType::fromMethodDescriptorString to get back the types if needed.
More information about the core-libs-dev