On 10/30/2015 02:04 PM, Mandy Chung wrote:
JEP 259:  http://openjdk.java.net/jeps/259

Javadoc for the proposed StackWalker API:
    
http://cr.openjdk.java.net/~mchung/jdk9/jep259/api/java/lang/StackWalker.html

A simple way to walk the stack:

    StackWalker walker = new StackWalker(StackWalker.Option.CLASS_REFERENCE);
    walker.walk((s) ->  s.filter(f -> 
interestingClasses.contains(f.getDeclaringClass())).findFirst());

The current usage of sun.reflect.Reflection.getCallerClass(int depth) can be 
replaced with this StackWalker API.

Any feedback on the proposed API is appreciated.

Mandy

P.S. webrev of the current implementation:
    http://cr.openjdk.java.net/~mchung/jdk9/jep259/webrev.00/

Clever/interesting way to prevent the stream from being used outside of the stack frame it is active in. I was trying to think of a way it could be subverted but I haven't come up with one yet.

Since this is very likely to be a one-implementation API, is there a reason to have a separate WalkerOption interface and Option enum? Seems like you could just skip the interface.

The batchSizeMapper should probably be something better than a Function<Integer,Integer>, no? All that boxing seems unnecessary... the next best candidate I can see though is IntToLongFunction. I wonder why we didn't do an IntToIntFunction in JSR 335. Or maybe the stream itself should be somehow made aware of the optimum batch size. What's the use case for changing the batch size as you iterate? Is the traversal *that* expensive?

Otherwise - looks nifty! I like the StackWalker#getCallerClass() shortcut method.

--
- DML

Reply via email to