From a6ef4b67d112da05c2738191820264983f0a0b5b Mon Sep 17 00:00:00 2001 From: sdhiray7 Date: Wed, 3 Aug 2022 06:06:48 +0530 Subject: [PATCH] BAEL-5608 - Get current stack trace java (#12533) * Initial commit for Object copy in Java * review comments commit for Object copy in Java * Initial commit for parseInt vs valueOf java * Review comments commit for parseInt vs valueOf java * Modify readme * review comments * build failure * build failure retry * build failure retry remove parseInt(java.lang.String,int,int,int) * build failure add comment * change examples * review comments * review comments 2 * review comments 3 * Initial commit for get current stacktrace * Remove old files * Name updates * Jenkins error * changes to file name * Review comments --- .../currentstacktrace/DumpStackTraceDemo.java | 18 +++++++ .../StackTraceUsingThreadDemo.java | 16 ++++++ .../StackTraceUsingThrowableDemo.java | 21 ++++++++ .../CurrentStacktraceDemoUnitTest.java | 49 +++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/DumpStackTraceDemo.java create mode 100644 core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThreadDemo.java create mode 100644 core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/currentstacktrace/StackTraceUsingThrowableDemo.java create mode 100644 core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/currentstacktrace/CurrentStacktraceDemoUnitTest.java 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 0000000000..fb67814312 --- /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 0000000000..a681fedd4f --- /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 0000000000..fbc08596c6 --- /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 0000000000..849884204d --- /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()); + } +}