1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.util.internal;
17
18 import java.util.ArrayList;
19 import java.util.List;
20 import java.util.regex.Pattern;
21
22 import org.jboss.netty.channel.DefaultChannelPipeline;
23 import org.jboss.netty.channel.SimpleChannelHandler;
24 import org.jboss.netty.channel.StaticChannelPipeline;
25 import org.jboss.netty.util.DebugUtil;
26 import org.jboss.netty.util.ThreadRenamingRunnable;
27
28
29
30
31
32
33
34
35
36
37
38
39 public class StackTraceSimplifier {
40
41 private static final boolean SIMPLIFY_STACK_TRACE = !DebugUtil.isDebugEnabled();
42 private static final Pattern EXCLUDED_STACK_TRACE =
43 Pattern.compile(
44 "^org\\.jboss\\.netty\\." +
45 "(util\\.(ThreadRenamingRunnable|internal\\.DeadLockProofWorker)" +
46 "|channel\\.(SimpleChannel(Upstream|Downstream)?Handler|(Default|Static)ChannelPipeline.*))(\\$.*)?$");
47
48
49
50
51
52
53
54 public static void simplify(Throwable e) {
55 if (!SIMPLIFY_STACK_TRACE) {
56 return;
57 }
58
59 if (e.getCause() != null) {
60 simplify(e.getCause());
61 }
62
63 StackTraceElement[] trace = e.getStackTrace();
64 if (trace == null || trace.length == 0) {
65 return;
66 }
67
68
69 if (EXCLUDED_STACK_TRACE.matcher(trace[0].getClassName()).matches()) {
70 return;
71 }
72
73 List<StackTraceElement> simpleTrace =
74 new ArrayList<StackTraceElement>(trace.length);
75
76 simpleTrace.add(trace[0]);
77
78
79 for (int i = 1; i < trace.length; i ++) {
80 if (EXCLUDED_STACK_TRACE.matcher(trace[i].getClassName()).matches()) {
81 continue;
82 }
83 simpleTrace.add(trace[i]);
84 }
85
86 e.setStackTrace(
87 simpleTrace.toArray(new StackTraceElement[simpleTrace.size()]));
88 }
89 }