summaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2021-04-13 12:28:42 +0200
committerGitHub <noreply@github.com>2021-04-13 12:28:42 +0200
commitc752d3e4bcc1946358ccdee716f4141bf87748df (patch)
treebf3ee4c16006437ac79b893cc09e1e05c8714339 /container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
parent86097c6b1e4a59cef5b9dfcdec021213520b51ac (diff)
parentbbff5a9bb8854d7100b4981af9aa226d74ae0227 (diff)
Merge pull request #17380 from vespa-engine/gjoranv/merge-di-into-core_2
Gjoranv/merge di into core 2 [run-systemtest]
Diffstat (limited to 'container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java')
-rw-r--r--container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java47
1 files changed, 47 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java b/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
new file mode 100644
index 00000000000..b0d9d1f3921
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
@@ -0,0 +1,47 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.di.componentgraph.core;
+
+import java.util.Arrays;
+
+class Exceptions {
+
+ static <E extends Throwable> E removeStackTrace(E exception) {
+ if (preserveStackTrace()) {
+ return exception;
+ } else {
+ exception.setStackTrace(new StackTraceElement[0]);
+ return exception;
+ }
+ }
+
+ static boolean preserveStackTrace() {
+ String preserve = System.getProperty("jdisc.container.preserveStackTrace");
+ return (preserve != null && !preserve.isEmpty());
+ }
+
+ static Throwable cutStackTraceAtConstructor(Throwable throwable, StackTraceElement marker) {
+ if (throwable != null && !preserveStackTrace()) {
+ StackTraceElement[] stackTrace = throwable.getStackTrace();
+ int upTo = stackTrace.length - 1;
+
+ // take until ComponentNode is reached
+ while (upTo >= 0 && !stackTrace[upTo].getClassName().equals(ComponentNode.class.getName())) {
+ upTo--;
+ }
+
+ // then drop until <init> is reached
+ while (upTo >= 0 && !stackTrace[upTo].getMethodName().equals("<init>")) {
+ upTo--;
+ }
+ if (upTo < 0) {
+ throwable.setStackTrace(new StackTraceElement[0]);
+ } else {
+ throwable.setStackTrace(Arrays.copyOfRange(stackTrace, 0, upTo));
+ }
+
+ cutStackTraceAtConstructor(throwable.getCause(), marker);
+ }
+ return throwable;
+ }
+
+}