Class StackWalker
The walk method opens a sequential stream
of StackFrames 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.
Stack walker options configure the stack frame
information obtained by a StackWalker.
By default, the class name and method information are collected but
not the Class reference.
The method information can be dropped via the DROP_METHOD_INFO option. The Class object can be retained for
access via the RETAIN_CLASS_REFERENCE option.
Stack frames of the reflection API and implementation classes are
hidden by default.
StackWalker is thread-safe. Multiple threads can share
a single StackWalker object to traverse its own stack.
- Since:
- 9
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumStack walker option to configure the stack frame information obtained by aStackWalker.static interfaceAStackFrameobject represents a method invocation returned byStackWalker. -
Method Summary
Modifier and TypeMethodDescriptionvoidforEach(Consumer<? super StackWalker.StackFrame> action) Performs the given action on each element ofStackFramestream of the current thread, traversing from the top frame of the stack, which is the method calling thisforEachmethod.Class<?> Gets theClassobject of the caller who invoked the method that invokedgetCallerClass.static StackWalkerReturns aStackWalkerinstance.static StackWalkergetInstance(StackWalker.Option option) Returns aStackWalkerinstance with the given option specifying the stack frame information it can access.static StackWalkergetInstance(Set<StackWalker.Option> options) Returns aStackWalkerinstance with the givenoptionsspecifying the stack frame information it can access.static StackWalkergetInstance(Set<StackWalker.Option> options, int estimateDepth) Returns aStackWalkerinstance with the givenoptionsspecifying the stack frame information it can access.<T> Twalk(Function<? super Stream<StackWalker.StackFrame>, ? extends T> function) Applies the given function to the stream ofStackFrames for the current thread, traversing from the top frame of the stack, which is the method calling thiswalkmethod.
-
Method Details
-
getInstance
Returns aStackWalkerinstance.This
StackWalkeris configured to skip all hidden frames and no class reference is retained.- Returns:
- a
StackWalkerconfigured to skip all hidden frames and no class reference is retained.
-
getInstance
Returns aStackWalkerinstance with the given option specifying the stack frame information it can access.- Parameters:
option-stack walking option- Returns:
- a
StackWalkerconfigured with the given option
-
getInstance
Returns aStackWalkerinstance with the givenoptionsspecifying the stack frame information it can access.If the given
optionsis empty, thisStackWalkeris configured to skip all hidden frames and no class reference is retained.- Parameters:
options-stack walking options- Returns:
- a
StackWalkerconfigured with the given options
-
getInstance
Returns aStackWalkerinstance with the givenoptionsspecifying the stack frame information it can access.If the given
optionsis empty, thisStackWalkeris configured to skip all hidden frames and no class reference is retained.The
estimateDepthspecifies the estimate number of stack frames thisStackWalkerwill traverse that theStackWalkercould use as a hint for the buffer size.- Parameters:
options-stack walking optionsestimateDepth- Estimate number of stack frames to be traversed.- Returns:
- a
StackWalkerconfigured with the given options - Throws:
IllegalArgumentException- ifestimateDepth <= 0
-
walk
Applies the given function to the stream ofStackFrames for the current thread, traversing from the top frame of the stack, which is the method calling thiswalkmethod.The
StackFramestream will be closed when this method returns. When a closedStream<StackFrame>object is reused,IllegalStateExceptionwill be thrown.- Type Parameters:
T- The type of the result of applying the function to the stream of stack frame.- Parameters:
function- a function that takes a stream of stack frames and returns a result.- Returns:
- the result of applying the function to the stream of stack frame.
-
forEach
Performs the given action on each element ofStackFramestream of the current thread, traversing from the top frame of the stack, which is the method calling thisforEachmethod.This method is equivalent to calling
walk(s -> { s.forEach(action); return null; });- Parameters:
action- an action to be performed on eachStackFrameof the stack of the current thread
-
getCallerClass
Gets theClassobject of the caller who invoked the method that invokedgetCallerClass.This method filters reflection frames,
MethodHandle, and hidden frames regardless of theSHOW_REFLECT_FRAMESandSHOW_HIDDEN_FRAMESoptions thisStackWalkerhas 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,
IllegalCallerExceptionwill be thrown.This method throws
UnsupportedOperationExceptionif thisStackWalkeris not configured with theRETAIN_CLASS_REFERENCEoption.- Returns:
Classobject of the caller's caller invoking this method.- Throws:
UnsupportedOperationException- if thisStackWalkeris not configured withOption.RETAIN_CLASS_REFERENCE.IllegalCallerException- if there is no caller frame, i.e. when thisgetCallerClassmethod is called from a method which is the last frame on the stack.
-