Review Request: JDK-8157464: StackWalker.getCallerClass() is not
Daniel Fuchs
daniel.fuchs at oracle.com
Tue Sep 13 18:54:25 UTC 2016
Hi Mandy,
This looks good to me.
But I wonder about these 5 lines - isn't this introducing a change
of behavior if the caller is an anonymous class?
149 InstanceKlass* ik = method->method_holder();
150 if (ik->is_anonymous()) {
151 // use the host class as the caller class
152 ik = ik->host_klass();
153 }
What is the reason for returning the host class instead?
best regards,
-- daniel
On 13/09/16 19:24, Mandy Chung wrote:
> Webrev:
> http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8157464/webrev.01
>
> This revises the proposal posted some time ago [1].
>
> StackWalker::getCallerClass is a convenient method to find the caller class. It will return the invoker of the MethodHandle and java.lang.reflect.Method for the method calling StackWalker::getCallerClass, as it’s currently specified.
>
> This issue is related to MethodHandle for @CallerSensitive method. It behaves as if the caller is the lookup class and in the current implementation, the actual caller class is not the lookup class but a generated class.
>
> One intended usage of StackWalker::getCallerClass is to be called by library code acting as an agent that calls @CallerSensitive method on behalf of the true caller and typically it will call an appropriate method with the appropriate parameter (e.g. ResourceBundle.getBundle(String, ClassLoader).
>
> Given that StackWalker::getCallerClass is not expected to be used by any @CS method, this patch proposes to catch and throw an exception if StackWalker::getCallerClass is called by a @CS method. This will allow time to revisit this when such need is identified.
>
> thanks
> Mandy
> [1] http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-July/042345.html
>
More information about the core-libs-dev
mailing list