[PATCH] 4851444: Exposing sun.reflect.Reflection#getCallerClass as a public API in Java 8
Peter Levart
peter.levart at gmail.com
Fri Sep 20 10:05:39 UTC 2013
On 09/20/2013 10: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?
> The Thread#walkStack methods don't really describe the behaviour of
> the consumer. Will the consumer applied only once, or multiple times?
> 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.
The use-cases described used getCallerClass(int depth) repeatedly to
find a caller by iterating over a range of depths and calling
getCallerClass(depth). You can use either Thread.walkStack or
Thread.firstCaller for implementing those use-cases.
Maybe the following method would be handy to optimize search when we
know that we want to skip 1st N frames before starting testing with
predicate:
public static <T> T firstCaller(int startDepth,
Predicate<StackFrameInfo> predicate,
Function<StackFrameInfo,T> function) {
Reflection.getCallerClass(depth)
then becomes:
Thread.firstCaller(depth, f -> true, StackFrameInfo::getDeclaringClass);
Hm...
Peter
> bye Jochen
>
More information about the core-libs-dev
mailing list