Am 20.09.2013 20:46, schrieb Mandy Chung:
[...]
Exposing a StackStream API means that you need to eagerly walk the stack
and copy the stack frames to it before it returns.  I agree it is a much
more flexible API.  On the other hand, stack walking is sequential and
ordered and a stack stream will be traversed as in an iterator.

not the StackStream API, I did mean a Stream as in http://download.java.net/lambda/b78/docs/api/java/util/stream/Stream.html But I must say, I did not realize Stream has so little to offer in terms of default implementations. I am not saying using this class is a good idea, but if you already go on lambdas, then this should be at least something to consider... and to underline it: Stream does not require you to eagerly read all values

What about a findCaller method that takes a parameter to indicate how
many times you skip over the matching elements before applying the
function:

    Thread.findCaller(info -> {return
!haveToSkip(info.getDeclaringClass());},
                      nonSkippedFramesDepth,
                      StackFrameInfo::getDeclaringClass());

just to show you how this could work with the Stream

Thread.getStackStream().
      filter(info -> {return !haveToSkip(info.getDeclaringClass());}.
      subStream(nonSkippedFramesDepth).
      map(StackFrameInfo::getDeclaringClass).findFirst()

I am looking at those things since only recently, so there is surely a better way, but have an impression it should be enough. Especially I show this to you, so you can see that with a Stream no new method is needed.

bye Jochen

--
Jochen "blackdrag" Theodorou - Groovy Project Tech Lead
blog: http://blackdragsview.blogspot.com/
german groovy discussion newsgroup: de.comp.lang.misc
For Groovy programming sources visit http://groovy-lang.org

Reply via email to