Skip to content

Commit 00d4212

Browse files
yasin3061maibin
authored andcommitted
BAEL-608 - Introduction to Java9 StackWalking AP (eugenp#1329)
* [email protected] Evaluation article on Different Types of Bean Injection in Spring * Revert "[email protected]" This reverts commit 963cc51. * Fixing compilation error and removing unused import * Introduction to Java9 StackWalking API - [email protected] Code examples for the article "Introduction to Java9 StackWalking API" * BAEL-608 Introduction to Java9 StackWalking API * BAEL-608 Introduction to Java9 StackWalking API changing the test names to BDD style * BAEL-608 Introduction to Java9 StackWalking API correcting the typo * BAEL-608 Introduction to Java9 StackWalking API improving method names * BAEL-608 Introduction to Java9 StackWalking API test method names improvements
1 parent 6ea120d commit 00d4212

2 files changed

Lines changed: 38 additions & 13 deletions

File tree

core-java-9/src/main/java/com/baeldung/java9/stackwalker/StackWalkerDemo.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,48 +16,68 @@ public void methodTwo() {
1616
}
1717

1818
public void methodThree() {
19-
List<StackFrame> stackTrace = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
20-
.walk(StackWalkerDemo::walkExample);
19+
List<StackFrame> stackTrace = StackWalker.getInstance()
20+
.walk(this::walkExample);
2121

2222
printStackTrace(stackTrace);
2323

2424
System.out.println("---------------------------------------------");
2525

26-
stackTrace = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
27-
.walk(StackWalkerDemo::walkExample2);
26+
stackTrace = StackWalker.getInstance()
27+
.walk(this::walkExample2);
2828

2929
printStackTrace(stackTrace);
3030

3131
System.out.println("---------------------------------------------");
3232

33-
String line = StackWalker.getInstance()
34-
.walk(StackWalkerDemo::walkExample3);
33+
String line = StackWalker.getInstance().walk(this::walkExample3);
3534
System.out.println(line);
35+
36+
System.out.println("---------------------------------------------");
37+
38+
stackTrace = StackWalker.getInstance(StackWalker.Option.SHOW_REFLECT_FRAMES)
39+
.walk(this::walkExample);
40+
41+
printStackTrace(stackTrace);
42+
43+
System.out.println("---------------------------------------------");
44+
45+
Runnable r = () -> {
46+
List<StackFrame> stackTrace2 = StackWalker.getInstance(StackWalker.Option.SHOW_HIDDEN_FRAMES)
47+
.walk(this::walkExample);
48+
printStackTrace(stackTrace2);
49+
};
50+
r.run();
3651
}
3752

38-
private static List<StackFrame> walkExample(Stream<StackFrame> stackFrameStream) {
53+
public List<StackFrame> walkExample(Stream<StackFrame> stackFrameStream) {
3954
return stackFrameStream.collect(Collectors.toList());
4055
}
4156

42-
private static List<StackFrame> walkExample2(Stream<StackFrame> stackFrameStream) {
57+
public List<StackFrame> walkExample2(Stream<StackFrame> stackFrameStream) {
4358
return stackFrameStream.filter(frame -> frame.getClassName()
4459
.contains("com.baeldung"))
4560
.collect(Collectors.toList());
4661
}
4762

48-
private static String walkExample3(Stream<StackFrame> stackFrameStream) {
63+
public String walkExample3(Stream<StackFrame> stackFrameStream) {
4964
return stackFrameStream.filter(frame -> frame.getClassName()
5065
.contains("com.baeldung")
5166
&& frame.getClassName()
52-
.endsWith("Test"))
67+
.endsWith("Test"))
5368
.findFirst()
5469
.map(frame -> frame.getClassName() + "#" + frame.getMethodName() + ", Line " + frame.getLineNumber())
5570
.orElse("Unknown caller");
5671
}
72+
73+
public void findCaller() {
74+
Class<?> caller = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass();
75+
System.out.println(caller.getCanonicalName());
76+
}
5777

58-
private void printStackTrace(List<StackFrame> stackTrace) {
78+
public void printStackTrace(List<StackFrame> stackTrace) {
5979
for (StackFrame stackFrame : stackTrace) {
60-
System.out.println(stackFrame.getDeclaringClass()
80+
System.out.println(stackFrame.getClassName()
6181
.toString() + "#" + stackFrame.getMethodName() + ", Line " + stackFrame.getLineNumber());
6282
}
6383
}

core-java-9/src/test/java/com/baeldung/java9/stackwalker/StackWalkerDemoTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
public class StackWalkerDemoTest {
66

77
@Test
8-
public void walkTheStack() {
8+
public void giveStalkWalker_whenWalkingTheStack_thenShowStackFrames() {
99
new StackWalkerDemo().methodOne();
1010
}
11+
12+
@Test
13+
public void giveStalkWalker_whenInvokingFindCaller_thenFindCallingClass() {
14+
new StackWalkerDemo().findCaller();
15+
}
1116
}

0 commit comments

Comments
 (0)