StackTraceElement[] elements = this.getStackTrace();
StringBuilder sb = new StringBuilder();
- if (minLevel < elements.length) {
-
- sb.append("(");
- sb.append(toString(elements[minLevel]));
- for (int i = minLevel + 1; i <= maxLevel; i++) {
- if (i < elements.length) {
- sb.append(' ').append(toString(elements[i]));
- }
- }
- sb.append(')');
-
- } else if (elements.length == 0) {
-
- sb.append("(no stack trace)");
-
+ sb.append('(');
+
+ if (elements == null || elements.length == 0) {
+ sb.append("no stack trace");
} else {
- sb.append('(');
- sb.append(toString(elements[0]));
- for (int i = 1; i < elements.length; i++) {
- sb.append(' ').append(toString(elements[i]));
+ int levelCount = 0;
+ int position = minLevel;
+ while (levelCount <= (maxLevel - minLevel) && position < elements.length) {
+
+ // Ignore synthetic "access$0" methods generated by the JRE
+ if (elements[position].getMethodName().contains("$")) {
+ position++;
+ continue;
+ }
+
+ if (levelCount > 0) {
+ sb.append(' ');
+ }
+ sb.append(toString(elements[position]));
+ levelCount++;
+ position++;
}
- sb.append(" level=").append(minLevel).append(')');
}
+ sb.append(')');
+
message = sb.toString();
}
return message;