StackWalker
class StackWalker
kotlin.Any | |
↳ | java.lang.StackWalker |
A stack walker.
The walk
method opens a sequential stream of StackFrame
s for the current thread and then applies the given function to walk the StackFrame
stream. The stream reports stack frame elements in order, from the top most frame that represents the execution point at which the stack was generated to the bottom most frame. The StackFrame
stream is closed when the walk
method returns. If an attempt is made to reuse the closed stream, IllegalStateException
will be thrown.
The stack walking options of a StackWalker
determines the information of StackFrame
objects to be returned. By default, stack frames of the reflection API and implementation classes are hidden and StackFrame
s have the class name and method name available but not the Class reference
.
StackWalker
is thread-safe. Multiple threads can share a single StackWalker
object to traverse its own stack. A permission check is performed when a StackWalker
is created, according to the options it requests. No further permission check is done at stack walking time.
Summary
Nested classes | |
---|---|
Stack walker option to configure the stack frame information obtained by a |
|
abstract |
A |
Public methods | |
---|---|
Unit |
forEach(action: Consumer<in StackWalker.StackFrame!>!) Performs the given action on each element of |
Class<*>! |
Gets the |
static StackWalker! |
Returns a |
static StackWalker! |
getInstance(option: StackWalker.Option!) Returns a |
static StackWalker! |
getInstance(options: MutableSet<StackWalker.Option!>!) Returns a |
static StackWalker! |
getInstance(options: MutableSet<StackWalker.Option!>!, estimateDepth: Int) Returns a |
T |
walk(function: Function<in Stream<StackWalker.StackFrame!>!, out T>!) Applies the given function to the stream of |
Public methods
forEach
fun forEach(action: Consumer<in StackWalker.StackFrame!>!): Unit
Performs the given action on each element of StackFrame
stream of the current thread, traversing from the top frame of the stack, which is the method calling this forEach
method.
This method is equivalent to calling
walk(s -> { s.forEach(action); return null; });
Parameters | |
---|---|
action |
Consumer<in StackWalker.StackFrame!>!: an action to be performed on each StackFrame of the stack of the current thread |
getCallerClass
fun getCallerClass(): Class<*>!
Gets the Class
object of the caller who invoked the method that invoked getCallerClass
.
This method filters frames, java.lang.invoke.MethodHandle
, and hidden frames regardless of the SHOW_REFLECT_FRAMES
and SHOW_HIDDEN_FRAMES
options this StackWalker
has been configured with.
This method should be called when a caller frame is present. If it is called from the bottom most frame on the stack, IllegalCallerException
will be thrown.
This method throws UnsupportedOperationException
if this StackWalker
is not configured with the RETAIN_CLASS_REFERENCE
option.
Return | |
---|---|
Class<*>! |
Class object of the caller's caller invoking this method. |
Exceptions | |
---|---|
java.lang.UnsupportedOperationException |
if this StackWalker is not configured with Option.RETAIN_CLASS_REFERENCE . |
java.lang.IllegalCallerException |
if there is no caller frame, i.e. when this getCallerClass method is called from a method which is the last frame on the stack. |
getInstance
static fun getInstance(): StackWalker!
Returns a StackWalker
instance.
This StackWalker
is configured to skip all hidden frames and no class reference is retained.
Return | |
---|---|
StackWalker! |
a StackWalker configured to skip all hidden frames and no class reference is retained. |
getInstance
static fun getInstance(option: StackWalker.Option!): StackWalker!
Returns a StackWalker
instance with the given option specifying the stack frame information it can access.
If a security manager is present and the given option
is Option.RETAIN_CLASS_REFERENCE
, it calls its java.lang.SecurityManager#checkPermission method for RuntimePermission("getStackWalkerWithClassReference")
.
Parameters | |
---|---|
option |
StackWalker.Option!: stack walking option |
Return | |
---|---|
StackWalker! |
a StackWalker configured with the given option |
Exceptions | |
---|---|
java.lang.SecurityException |
if a security manager exists and its checkPermission method denies access. |
getInstance
static fun getInstance(options: MutableSet<StackWalker.Option!>!): StackWalker!
Returns a StackWalker
instance with the given options
specifying the stack frame information it can access. If the given options
is empty, this StackWalker
is configured to skip all hidden frames and no class reference is retained.
If a security manager is present and the given options
contains Option.RETAIN_CLASS_REFERENCE
, it calls its java.lang.SecurityManager#checkPermission method for RuntimePermission("getStackWalkerWithClassReference")
.
Parameters | |
---|---|
options |
MutableSet<StackWalker.Option!>!: stack walking option |
Return | |
---|---|
StackWalker! |
a StackWalker configured with the given options |
Exceptions | |
---|---|
java.lang.SecurityException |
if a security manager exists and its checkPermission method denies access. |
getInstance
static fun getInstance(
options: MutableSet<StackWalker.Option!>!,
estimateDepth: Int
): StackWalker!
Returns a StackWalker
instance with the given options
specifying the stack frame information it can access. If the given options
is empty, this StackWalker
is configured to skip all hidden frames and no class reference is retained.
If a security manager is present and the given options
contains Option.RETAIN_CLASS_REFERENCE
, it calls its java.lang.SecurityManager#checkPermission method for RuntimePermission("getStackWalkerWithClassReference")
.
The estimateDepth
specifies the estimate number of stack frames this StackWalker
will traverse that the StackWalker
could use as a hint for the buffer size.
Parameters | |
---|---|
options |
MutableSet<StackWalker.Option!>!: stack walking options |
estimateDepth |
Int: Estimate number of stack frames to be traversed. |
Return | |
---|---|
StackWalker! |
a StackWalker configured with the given options |
Exceptions | |
---|---|
java.lang.IllegalArgumentException |
if estimateDepth <= 0 |
java.lang.SecurityException |
if a security manager exists and its checkPermission method denies access. |
walk
fun <T : Any!> walk(function: Function<in Stream<StackWalker.StackFrame!>!, out T>!): T
Applies the given function to the stream of StackFrame
s for the current thread, traversing from the top frame of the stack, which is the method calling this walk
method.
The StackFrame
stream will be closed when this method returns. When a closed Stream<StackFrame>
object is reused, IllegalStateException
will be thrown.
Parameters | |
---|---|
function |
Function<in Stream<StackWalker.StackFrame!>!, out T>!: a function that takes a stream of stack frames and returns a result. |
<T> |
The type of the result of applying the function to the stream of stack frame. |
Return | |
---|---|
T |
the result of applying the function to the stream of stack frame. |