[PATCH] 4851444: Exposing sun.reflect.Reflection#getCallerClass as a public API in Java 8

Mandy Chung mandy.chung at oracle.com
Fri Sep 20 19:25:13 UTC 2013


On 9/20/13 1:58 AM, Jochen Theodorou wrote:
> Am 20.09.2013 09:09, schrieb Mandy Chung:
> [...]
>> Stack is a "stream" that allows you to walk partial stack (e.g. find
>> caller) or full stack trace (e.g. throwable). The filtering and mapping
>> operations are lazy to avoid having the VM eagerly copying the entire
>> stack trace data even for the short reach case (like Groovy and Log4j).
>
> and is there a link to StackStram too?

No.  The concrete implementation is yet to be done and it would need a 
new VM entry point that the library code to use.

It's not interesting to read what I did in my hack version that is 
intended to help design how the API works with the use cases.

> The Thread#walkStack methods don't really describe the behaviour of 
> the consumer. Will the consumer applied only once, or multiple times? 

Apply once to each element like Iterable.forEach.
> If only once, then to replace getCallerClass(int depth), you will need 
> the version with the predicate, which will be difficult to realize 
> with a simple lambda, since you will need to count as well.
>

Ah... I see what you need as you mentioned in [1]. Thread.getCaller 
skips the first frame that matches the predicate and you want to be able 
to control the number of skips.  Just curious - do you mind explaining 
what the matchLevel is in 
org.codehaus.groovy.reflection.ReflectionUtils.getCallingClass(int 
matchLevel, Collection<String> extraIgnoredPackages)?

I understand matchLevel == 1 when you look for the immediate caller.   
Understand what situation do you look for matchLevel > 1?

Mandy
[1] 
http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-September/021243.html
https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/reflection/ReflectionUtils.java#L105



More information about the core-libs-dev mailing list