@@ -69,7 +69,7 @@ public static void logBacktrace(RubyStackTraceElement[] trace) {
69
69
70
70
buffer .append ("Backtrace generated:\n " );
71
71
72
- renderBacktraceJRuby (trace , buffer , false );
72
+ renderBacktraceJRuby (trace , buffer , false , Direction . Forward );
73
73
74
74
// NOTE: other logXxx method do not remove the new-line
75
75
// ... but if this is desired they should do so as well
@@ -298,7 +298,7 @@ public String printBacktrace(RubyException exception, boolean console) {
298
298
}
299
299
300
300
public void renderBacktrace (RubyStackTraceElement [] elts , StringBuilder buffer , boolean color ) {
301
- renderBacktraceJRuby (elts , buffer , color );
301
+ renderBacktraceJRuby (elts , buffer , color , Direction . Reverse );
302
302
}
303
303
};
304
304
@@ -388,9 +388,9 @@ public static String printBacktraceJRuby(RubyStackTraceElement[] frames, String
388
388
389
389
StringBuilder buffer = new StringBuilder (64 + frames .length * 48 );
390
390
391
- buffer . append ( type ). append ( ": " ). append ( message ). append ( '\n' );
391
+ renderBacktraceJRuby ( frames , buffer , color , Direction . Reverse );
392
392
393
- renderBacktraceJRuby ( frames , buffer , color );
393
+ buffer . append ( type ). append ( ": " ). append ( message ). append ( '\n' );
394
394
395
395
return buffer .toString ();
396
396
}
@@ -412,7 +412,9 @@ protected static String printBacktraceJRuby(RubyException exception, boolean con
412
412
return printBacktraceJRuby (frames , type , message , color );
413
413
}
414
414
415
- private static void renderBacktraceJRuby (RubyStackTraceElement [] frames , StringBuilder buffer , boolean color ) {
415
+ private enum Direction { Forward , Reverse };
416
+
417
+ private static void renderBacktraceJRuby (RubyStackTraceElement [] frames , StringBuilder buffer , boolean color , Direction direction ) {
416
418
// find longest method name
417
419
int longestMethod = 0 ;
418
420
for (RubyStackTraceElement frame : frames ) {
@@ -421,7 +423,8 @@ private static void renderBacktraceJRuby(RubyStackTraceElement[] frames, StringB
421
423
422
424
// backtrace lines
423
425
boolean first = true ;
424
- for (RubyStackTraceElement frame : frames ) {
426
+ for (int i = 0 ; i < frames .length ; i ++) {
427
+ RubyStackTraceElement frame = direction == Direction .Forward ? frames [i ] : frames [frames .length - i - 1 ];
425
428
if (color ) {
426
429
if (first ) {
427
430
buffer .append (FIRST_COLOR );
0 commit comments