private static void printExceptionSummary(Ruby runtime, RubyException rEx) { RubyStackTraceElement[] elements = rEx.getBacktraceElements(); RubyStackTraceElement firstElement = elements.length > 0 ? elements[0] : new RubyStackTraceElement("", "", "(empty)", 0, false); String msg = String.format("Exception `%s' at %s:%s - %s\n", rEx.getMetaClass(), firstElement.getFileName(), firstElement.getLineNumber(), TypeConverter.convertToType(rEx, runtime.getString(), "to_s")); runtime.getErrorStream().print(msg); }
longestMethod = Math.max(longestMethod, frame.getMethodName().length()); if (first) { buffer.append(FIRST_COLOR); } else if (frame.isBinding() || frame.getFileName().equals("(eval)")) { buffer.append(EVAL_COLOR); } else if (frame.getFileName().indexOf(".java") != -1) { buffer.append(KERNEL_COLOR); String methodName = runtime == null ? frame.getMethodName() : runtime.newSymbol(frame.getMethodName()).idString(); for (int j = 0; j < longestMethod - methodName.length(); j++) { buffer.append(' '); .append(methodName) .append(" at ") .append(frame.getFileName()) .append(':') .append(frame.getLineNumber());
public static StackTraceElement[] javaTraceFromRubyTrace(RubyStackTraceElement[] trace) { StackTraceElement[] newTrace = new StackTraceElement[trace.length]; for (int i = 0; i < newTrace.length; i++) { newTrace[i] = trace[i].asStackTraceElement(); } return newTrace; }
private static void renderBacktraceMRI(RubyStackTraceElement[] trace, String linePrefix, StringBuilder buffer, boolean color) { for (int i = 0; i < trace.length; i++) { RubyStackTraceElement element = trace[i]; buffer .append(linePrefix) .append(element.getFileName()) .append(':') .append(element.getLineNumber()) .append(":in `") .append(element.getMethodName()) .append("'\n"); } }
@JRubyMethod public IRubyObject label(ThreadContext context) { if (element.getFrameType() == FrameType.BLOCK) { // NOTE: "block in " + ... logic, now, also at RubyStackTraceElement.to_s_mri if (label == null) label = context.runtime.newString("block in " + element.getMethodName()); return label; } return base_label(context); }
RubyStackTraceElement rubyElement = new RubyStackTraceElement(className, decodedName, filename, line, false, type); trace.add(new RubyStackTraceElement(className, dupFrameName, filename, line, false, type)); trace.add(new RubyStackTraceElement(className, rubyName, filename, line, false)); default: newName = rubyFrame.method; RubyStackTraceElement rubyElement = new RubyStackTraceElement("RUBY", newName, rubyFrame.filename, rubyFrame.line + 1, false, frameType); trace.add(new RubyStackTraceElement(rubyElement.getClassName(), dupFrameName, rubyElement.getFileName(), rubyElement.getLineNumber(), rubyElement.isBinding(), rubyElement.getFrameType())); trace.add(new RubyStackTraceElement(className, methodName, filename, line, false));
private static void writeWarning(Ruby runtime, ID id, String message) { RubyStackTraceElement[] stack = getRubyStackTrace(runtime); String file; int line; if (stack.length == 0) { file = "(unknown)"; line = -1; } else { file = stack[0].getFileName(); line = stack[0].getLineNumber(); } runtime.getWarnings().warning(id, file, line, message); }
public static RubyString to_s_mri(ThreadContext context, RubyStackTraceElement element) { RubySymbol methodSym = context.runtime.newSymbol(element.getMethodName()); RubyString line = context.runtime.newString(new ByteList(methodSym.getBytes().length() + element.getFileName().length() + 18)); line.setEncoding(methodSym.getEncoding()); line.cat(element.getFileName().getBytes()); line.cat(CommonByteLists.COLON); line.cat(ConvertBytes.longToByteList(element.getLineNumber())); line.cat(CommonByteLists.BACKTRACE_IN); if (element.getFrameType() == FrameType.BLOCK) line.catString("block in "); line.cat(methodSym.getBytes()); line.cat('\''); return line; }
@JRubyMethod public IRubyObject path(ThreadContext context) { return context.runtime.newString(element.getFileName()); }
@JRubyMethod public IRubyObject base_label(ThreadContext context) { if (baseLabel == null) baseLabel = context.runtime.newString(element.getMethodName()); return baseLabel; }
@JRubyMethod public IRubyObject lineno(ThreadContext context) { return context.runtime.newFixnum(element.getLineNumber()); }
public static RubyStackTraceElement[] gatherRawBacktrace(Ruby runtime, StackTraceElement[] stackTrace) { List trace = new ArrayList(stackTrace.length); for (int i = 0; i < stackTrace.length; i++) { StackTraceElement element = stackTrace[i]; trace.add(new RubyStackTraceElement(element)); } RubyStackTraceElement[] rubyStackTrace = new RubyStackTraceElement[trace.size()]; return (RubyStackTraceElement[])trace.toArray(rubyStackTrace); }
@JRubyMethod public IRubyObject to_s(ThreadContext context) { return context.runtime.newString(element.mriStyleString()); }
private StackTraceElement[] javaTraceFromRubyTrace(RubyStackTraceElement[] trace) { StackTraceElement[] newTrace = new StackTraceElement[trace.length]; for (int i = 0; i < newTrace.length; i++) { newTrace[i] = trace[i].getElement(); } return newTrace; } }
RubyStackTraceElement rubyElement = new RubyStackTraceElement(className, decodedName, filename, line, false, type); trace.add(new RubyStackTraceElement(className, dupFrameName, filename, line, false, type)); trace.add(new RubyStackTraceElement(className, rubyName, filename, line, false)); default: newName = rubyFrame.method; RubyStackTraceElement rubyElement = new RubyStackTraceElement("RUBY", newName, rubyFrame.filename, rubyFrame.line + 1, false, frameType); trace.add(new RubyStackTraceElement(rubyElement.getClassName(), dupFrameName, rubyElement.getFileName(), rubyElement.getLineNumber(), rubyElement.isBinding(), rubyElement.getFrameType())); trace.add(new RubyStackTraceElement(className, methodName, filename, line, false));
private static void renderBacktraceMRI(RubyStackTraceElement[] trace, String linePrefix, StringBuilder buffer, boolean color) { for (int i = 0; i < trace.length; i++) { RubyStackTraceElement element = trace[i]; buffer .append(linePrefix) .append(element.getFileName()) .append(':') .append(element.getLineNumber()) .append(":in `") .append(element.getMethodName()) .append("'\n"); } }
private static void writeWarning(Ruby runtime, ID id, String message) { RubyStackTraceElement[] stack = getRubyStackTrace(runtime); String file; int line; if (stack.length == 0) { file = "(unknown)"; line = -1; } else { file = stack[0].getFileName(); line = stack[0].getLineNumber(); } runtime.getWarnings().warning(id, file, line, message); }
public static RubyString to_s_mri(ThreadContext context, RubyStackTraceElement element) { RubySymbol methodSym = context.runtime.newSymbol(element.getMethodName()); RubyString line = context.runtime.newString(new ByteList(methodSym.getBytes().length() + element.getFileName().length() + 18)); line.setEncoding(methodSym.getEncoding()); line.cat(element.getFileName().getBytes()); line.cat(CommonByteLists.COLON); line.cat(ConvertBytes.longToByteList(element.getLineNumber())); line.cat(CommonByteLists.BACKTRACE_IN); if (element.getFrameType() == FrameType.BLOCK) line.catString("block in "); line.cat(methodSym.getBytes()); line.cat('\''); return line; }
@JRubyMethod public IRubyObject absolute_path(ThreadContext context) { return context.runtime.newString(element.getFileName()); }
@JRubyMethod public IRubyObject base_label(ThreadContext context) { if (baseLabel == null) baseLabel = context.runtime.newString(element.getMethodName()); return baseLabel; }