bug fixes
[debian/openrocket] / src / net / sf / openrocket / logging / TraceException.java
index 01029d7d34e06493b316b6f4c1e7ff5973ca4912..f3fc1714ae9c0e05246cabd4458a377dbeb1a834 100644 (file)
@@ -95,31 +95,33 @@ public class TraceException extends Exception {
                        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;