/** * Calls {@link #setStackTrace(StackTraceElement[])} to claim * the stack trace that include scripts */ protected void overwriteStackTrace(Throwable target) { List<List<StackTraceElement>> interpreterStack; Evaluator interpreter = Context.createInterpreter(); if (interpreter != null) interpreterStack = interpreter.buildScriptStack(this); else interpreterStack = Collections.emptyList(); int interpreterStackIndex = 0; List<StackTraceElement> newStacks = new ArrayList<StackTraceElement>(); StackTraceElement[] stack = target.getStackTrace(); for (int i = 0; i < stack.length; i++) { StackTraceElement e = stack[i]; if (interpreterStack != null && "net.sourceforge.htmlunit.corejs.javascript.Interpreter".equals(e.getClassName()) && "interpretLoop".equals(e.getMethodName())) { newStacks.addAll(interpreterStack.get(interpreterStackIndex++)); } else { newStacks.add(e); } } target.setStackTrace(newStacks.toArray(new StackTraceElement[newStacks.size()])); }