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 much like it may not possible to reproduce the declaring 
class from the class name string, hence the need for RETAIN_CLASS_REFERENCE?

If i understand you correctly i think you are saying the method descriptor is 
more useful for informational (logging say) purposes?

Paul.

> On 28 Aug 2017, at 15:57, mandy chung <[email protected]> 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:
> http://cr.openjdk.java.net/~mchung/jdk10/webrevs/8186050/webrev.00/index.html
> 
> 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.
> 
> thanks
> Mandy

Reply via email to