diff --git a/core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java b/core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java index ee2cf092cd..a0e632d569 100644 --- a/core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java +++ b/core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java @@ -16,48 +16,68 @@ public class StackWalkerDemo { } public void methodThree() { - List stackTrace = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE) - .walk(StackWalkerDemo::walkExample); + List stackTrace = StackWalker.getInstance() + .walk(this::walkExample); printStackTrace(stackTrace); System.out.println("---------------------------------------------"); - stackTrace = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE) - .walk(StackWalkerDemo::walkExample2); + stackTrace = StackWalker.getInstance() + .walk(this::walkExample2); printStackTrace(stackTrace); System.out.println("---------------------------------------------"); - String line = StackWalker.getInstance() - .walk(StackWalkerDemo::walkExample3); + String line = StackWalker.getInstance().walk(this::walkExample3); System.out.println(line); + + System.out.println("---------------------------------------------"); + + stackTrace = StackWalker.getInstance(StackWalker.Option.SHOW_REFLECT_FRAMES) + .walk(this::walkExample); + + printStackTrace(stackTrace); + + System.out.println("---------------------------------------------"); + + Runnable r = () -> { + List stackTrace2 = StackWalker.getInstance(StackWalker.Option.SHOW_HIDDEN_FRAMES) + .walk(this::walkExample); + printStackTrace(stackTrace2); + }; + r.run(); } - private static List walkExample(Stream stackFrameStream) { + public List walkExample(Stream stackFrameStream) { return stackFrameStream.collect(Collectors.toList()); } - private static List walkExample2(Stream stackFrameStream) { + public List walkExample2(Stream stackFrameStream) { return stackFrameStream.filter(frame -> frame.getClassName() .contains("com.baeldung")) .collect(Collectors.toList()); } - private static String walkExample3(Stream stackFrameStream) { + public String walkExample3(Stream stackFrameStream) { return stackFrameStream.filter(frame -> frame.getClassName() .contains("com.baeldung") && frame.getClassName() - .endsWith("Test")) + .endsWith("Test")) .findFirst() .map(frame -> frame.getClassName() + "#" + frame.getMethodName() + ", Line " + frame.getLineNumber()) .orElse("Unknown caller"); } + + public void findCaller() { + Class caller = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass(); + System.out.println(caller.getCanonicalName()); + } - private void printStackTrace(List stackTrace) { + public void printStackTrace(List stackTrace) { for (StackFrame stackFrame : stackTrace) { - System.out.println(stackFrame.getDeclaringClass() + System.out.println(stackFrame.getClassName() .toString() + "#" + stackFrame.getMethodName() + ", Line " + stackFrame.getLineNumber()); } } diff --git a/core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoTest.java b/core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoTest.java index 61c8440b87..b523b7dfb2 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoTest.java @@ -5,7 +5,12 @@ import org.junit.Test; public class StackWalkerDemoTest { @Test - public void walkTheStack() { + public void giveStalkWalker_whenWalkingTheStack_thenShowStackFrames() { new StackWalkerDemo().methodOne(); } + + @Test + public void giveStalkWalker_whenInvokingFindCaller_thenFindCallingClass() { + new StackWalkerDemo().findCaller(); + } }