]> git.proxmox.com Git - ceph.git/blob - ceph/src/arrow/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/StackTrace.java
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / java / memory / memory-core / src / main / java / org / apache / arrow / memory / util / StackTrace.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.arrow.memory.util;
19
20 import java.util.Arrays;
21
22 /**
23 * Convenient way of obtaining and manipulating stack traces for debugging.
24 */
25 public class StackTrace {
26
27 private final StackTraceElement[] stackTraceElements;
28
29 /**
30 * Constructor. Captures the current stack trace.
31 */
32 public StackTrace() {
33 // skip over the first element so that we don't include this constructor call
34 final StackTraceElement[] stack = Thread.currentThread().getStackTrace();
35 stackTraceElements = Arrays.copyOfRange(stack, 1, stack.length - 1);
36 }
37
38 /**
39 * Write the stack trace to a StringBuilder.
40 *
41 * @param sb where to write it
42 * @param indent how many double spaces to indent each line
43 */
44 public void writeToBuilder(final StringBuilder sb, final int indent) {
45 // create the indentation string
46 final char[] indentation = new char[indent * 2];
47 Arrays.fill(indentation, ' ');
48
49 // write the stack trace in standard Java format
50 for (StackTraceElement ste : stackTraceElements) {
51 sb.append(indentation)
52 .append("at ")
53 .append(ste.getClassName())
54 .append('.')
55 .append(ste.getMethodName())
56 .append('(')
57 .append(ste.getFileName())
58 .append(':')
59 .append(Integer.toString(ste.getLineNumber()))
60 .append(")\n");
61 }
62 }
63
64 @Override
65 public String toString() {
66 final StringBuilder sb = new StringBuilder();
67 writeToBuilder(sb, 0);
68 return sb.toString();
69 }
70 }