diff --git a/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/DumpStackTraceDemo.java b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/DumpStackTraceDemo.java new file mode 100644 index 000000000000..fb678143125c --- /dev/null +++ b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/DumpStackTraceDemo.java @@ -0,0 +1,18 @@ +package com.baeldung.exception.currentstacktrace; + +public class DumpStackTraceDemo +{ + public static void main(String[] args) { + methodA(); + } + + public static void methodA() { + try { + int num1 = 5/0; // java.lang.ArithmeticException: divide by zero + } + catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThreadDemo.java b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThreadDemo.java new file mode 100644 index 000000000000..a681fedd4f96 --- /dev/null +++ b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThreadDemo.java @@ -0,0 +1,16 @@ +package com.baeldung.exception.currentstacktrace; + +public class StackTraceUsingThreadDemo { + + public static void main(String[] args) { + methodA(); + } + + public static StackTraceElement[] methodA() { + return methodB(); + } + + public static StackTraceElement[] methodB() { + return Thread.currentThread().getStackTrace(); + } +} diff --git a/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThrowableDemo.java b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThrowableDemo.java new file mode 100644 index 000000000000..fbc08596c682 --- /dev/null +++ b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThrowableDemo.java @@ -0,0 +1,21 @@ +package com.baeldung.exception.currentstacktrace; + +public class StackTraceUsingThrowableDemo { + + public static void main(String[] args) { + methodA(); + } + + public static StackTraceElement[] methodA() { + try { + methodB(); + } catch (Throwable t) { + return t.getStackTrace(); + } + return null; + } + + public static void methodB() throws Throwable { + throw new Throwable("A test exception"); + } +} diff --git a/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/currentstacktrace/CurrentStacktraceDemoUnitTest.java b/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/currentstacktrace/CurrentStacktraceDemoUnitTest.java new file mode 100644 index 000000000000..849884204df9 --- /dev/null +++ b/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/currentstacktrace/CurrentStacktraceDemoUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.exception.currentstacktrace; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.baeldung.exception.currentstacktrace.StackTraceUsingThreadDemo; +import com.baeldung.exception.currentstacktrace.StackTraceUsingThrowableDemo; + +public class CurrentStacktraceDemoUnitTest { + + @Test + public void whenElementIsFecthedUsingThread_thenCorrectMethodAndClassIsReturned() { + StackTraceElement[] stackTrace = new StackTraceUsingThreadDemo().methodA(); + + StackTraceElement elementZero = stackTrace[0]; + assertEquals("java.lang.Thread", elementZero.getClassName()); + assertEquals("getStackTrace", elementZero.getMethodName()); + + StackTraceElement elementOne = stackTrace[1]; + assertEquals("com.baeldung.exception.currentstacktrace.StackTraceUsingThreadDemo", elementOne.getClassName()); + assertEquals("methodB", elementOne.getMethodName()); + + StackTraceElement elementTwo = stackTrace[2]; + assertEquals("com.baeldung.exception.currentstacktrace.StackTraceUsingThreadDemo", elementTwo.getClassName()); + assertEquals("methodA", elementTwo.getMethodName()); + + StackTraceElement elementThree = stackTrace[3]; + assertEquals("com.baeldung.exception.currentstacktrace.CurrentStacktraceDemoUnitTest", elementThree.getClassName()); + assertEquals("whenElementIsFecthedUsingThread_thenCorrectMethodAndClassIsReturned", elementThree.getMethodName()); + } + + @Test + public void whenElementIsFecthedUsingThrowable_thenCorrectMethodAndClassIsReturned() { + StackTraceElement[] stackTrace = new StackTraceUsingThrowableDemo().methodA(); + + StackTraceElement elementZero = stackTrace[0]; + assertEquals("com.baeldung.exception.currentstacktrace.StackTraceUsingThrowableDemo", elementZero.getClassName()); + assertEquals("methodB", elementZero.getMethodName()); + + StackTraceElement elementOne = stackTrace[1]; + assertEquals("com.baeldung.exception.currentstacktrace.StackTraceUsingThrowableDemo", elementOne.getClassName()); + assertEquals("methodA", elementOne.getMethodName()); + + StackTraceElement elementThree = stackTrace[2]; + assertEquals("com.baeldung.exception.currentstacktrace.CurrentStacktraceDemoUnitTest", elementThree.getClassName()); + assertEquals("whenElementIsFecthedUsingThrowable_thenCorrectMethodAndClassIsReturned", elementThree.getMethodName()); + } +}