@JRubyMethod(required = 1) public IRubyObject set_backtrace(IRubyObject obj) { setBacktrace(obj); return backtrace(); }
@JRubyMethod(required = 1) public IRubyObject set_backtrace(IRubyObject obj) { setBacktrace(obj); return backtrace(); }
public IRubyObject backtrace() { IRubyObject rubyTrace = super.backtrace(); if (rubyTrace.isNil()) { return rubyTrace; } RubyArray array = (RubyArray) rubyTrace.dup(); StackTraceElement[] stackTrace = cause.getStackTrace(); for (int i = stackTrace.length - 1; i >= 0; i--) { StackTraceElement element = stackTrace[i]; String className = element.getClassName(); String line = null; if (element.getFileName() == null) { line = className + ":" + element.getLineNumber() + ":in `" + element.getMethodName() + "'"; } else { int index = className.lastIndexOf("."); String packageName = null; if (index == -1) { packageName = ""; } else { packageName = className.substring(0, index) + "/"; } line = packageName.replace(".", "/") + element.getFileName() + ":" + element.getLineNumber() + ":in `" + element.getMethodName() + "'"; } RubyString string = runtime.newString(line); array.unshift(string); } return array; }
public IRubyObject backtrace() { IRubyObject rubyTrace = super.backtrace(); if (rubyTrace.isNil()) { return rubyTrace; } RubyArray array = (RubyArray) rubyTrace.dup(); StackTraceElement[] stackTrace = cause.getStackTrace(); for (int i = stackTrace.length - 1; i >= 0; i--) { StackTraceElement element = stackTrace[i]; String className = element.getClassName(); String line = null; if (element.getFileName() == null) { line = className + ":" + element.getLineNumber() + ":in `" + element.getMethodName() + "'"; } else { int index = className.lastIndexOf("."); String packageName = null; if (index == -1) { packageName = ""; } else { packageName = className.substring(0, index) + "/"; } line = packageName.replace(".", "/") + element.getFileName() + ":" + element.getLineNumber() + ":in `" + element.getMethodName() + "'"; } RubyString string = runtime.newString(line); array.unshift(string); } return array; }
@Override public final IRubyObject backtrace() { IRubyObject rubyTrace = super.backtrace(); if ( rubyTrace.isNil() ) return rubyTrace; final Ruby runtime = getRuntime(); final RubyArray rTrace = (RubyArray) rubyTrace; StackTraceElement[] jTrace = cause.getStackTrace(); // NOTE: with the new filtering ruby trace will already include the source (Java) part if ( rTrace.size() > 0 && jTrace.length > 0 ) { final String r0 = rTrace.eltInternal(0).toString(); // final StackTraceElement j0 = jTrace[0]; final String method = jTrace[0].getMethodName(); final String file = jTrace[0].getFileName(); if ( method != null && file != null && r0.indexOf(method) != -1 && r0.indexOf(file) != -1 ) { return rTrace; // as is } } // so join-ing is mostly unnecessary, but just in case (due compatibility) make sure : return joinedBacktrace(runtime, rTrace, jTrace); }
@Override public final IRubyObject backtrace() { IRubyObject rubyTrace = super.backtrace(); if ( rubyTrace.isNil() ) return rubyTrace; final Ruby runtime = getRuntime(); final RubyArray rTrace = (RubyArray) rubyTrace; StackTraceElement[] jTrace = cause.getStackTrace(); // NOTE: with the new filtering ruby trace will already include the source (Java) part if ( rTrace.size() > 0 && jTrace.length > 0 ) { final String r0 = rTrace.eltInternal(0).toString(); // final StackTraceElement j0 = jTrace[0]; final String method = jTrace[0].getMethodName(); final String file = jTrace[0].getFileName(); if ( method != null && file != null && r0.indexOf(method) != -1 && r0.indexOf(file) != -1 ) { return rTrace; // as is } } // so join-ing is mostly unnecessary, but just in case (due compatibility) make sure : return joinedBacktrace(runtime, rTrace, jTrace); }
/** * Attempts to interpret the given exception in a Ruby context. * * @param inE an <code>Exception</code> * @return a <code>String</code> describing the exception's contents */ static String exceptionAsString(Exception inE) { RaiseException raiseException = null; if(inE instanceof RaiseException) { raiseException = (RaiseException)inE; } else if(inE instanceof BSFException && ((BSFException)inE).getTargetException() instanceof RaiseException) { raiseException = (RaiseException)((BSFException)inE).getTargetException(); } if(raiseException != null) { return String.format("%s %s", //$NON-NLS-1$ raiseException.getException().toString(), raiseException.getException().backtrace().toString()); } return inE.toString(); } /* (non-Javadoc)
@JRubyMethod(required = 1) public IRubyObject set_backtrace(IRubyObject obj) { if (obj.isNil()) { backtrace = null; } else if (!isArrayOfStrings(obj)) { throw getRuntime().newTypeError("backtrace must be Array of String"); } else { backtrace = obj; } return backtrace(); }
@JRubyMethod(required = 1) public IRubyObject set_backtrace(IRubyObject obj) { if (obj.isNil()) { backtrace = null; } else if (!isArrayOfStrings(obj)) { throw getRuntime().newTypeError("backtrace must be Array of String"); } else { backtrace = obj; } return backtrace(); }
public IRubyObject call() throws Exception { ThreadContext context = runtime.getCurrentContext(); try { return body.call(context); } catch (RaiseException re) { RubyKernel.puts(context, body.getBinding().getSelf(), new IRubyObject[] { RubyString.newString(runtime, "joroutine terminated with error: " + re.getMessage())}); RubyKernel.puts(context, body.getBinding().getSelf(), new IRubyObject[] {re.getException().backtrace()}); throw re; } }
public void exceptionRaised(RaiseException exception) { assert isCurrent(); RubyException rubyException = exception.getException(); Ruby runtime = rubyException.getRuntime(); if (runtime.getSystemExit().isInstance(rubyException)) { runtime.getThreadService().getMainThread().raise(new IRubyObject[] {rubyException}, Block.NULL_BLOCK); } else if (abortOnException(runtime)) { RubyException systemExit; if (!runtime.is1_9()) { runtime.printError(rubyException); String message = rubyException.message.convertToString().toString(); systemExit = RubySystemExit.newInstance(runtime, 1, message); systemExit.set_backtrace(rubyException.backtrace()); } else { systemExit = rubyException; } runtime.getThreadService().getMainThread().raise(new IRubyObject[] {systemExit}, Block.NULL_BLOCK); return; } else if (runtime.getDebug().isTrue()) { runtime.printError(exception.getException()); } exitingException = exception; }
public void exceptionRaised(RaiseException exception) { assert isCurrent(); RubyException rubyException = exception.getException(); Ruby runtime = rubyException.getRuntime(); if (runtime.getSystemExit().isInstance(rubyException)) { runtime.getThreadService().getMainThread().raise(new IRubyObject[] {rubyException}, Block.NULL_BLOCK); } else if (abortOnException(runtime)) { RubyException systemExit; if (!runtime.is1_9()) { runtime.printError(rubyException); String message = rubyException.message.convertToString().toString(); systemExit = RubySystemExit.newInstance(runtime, 1, message); systemExit.set_backtrace(rubyException.backtrace()); } else { systemExit = rubyException; } runtime.getThreadService().getMainThread().raise(new IRubyObject[] {systemExit}, Block.NULL_BLOCK); return; } else if (runtime.getDebug().isTrue()) { runtime.printError(exception.getException()); } exitingException = exception; }