/** * Outputs the instruction stack. Useful for debugging. * {@link TemplateException}s incorporate this information in their stack * traces. */ public void outputInstructionStack(PrintWriter pw) { pw.println("----------"); ListIterator iter = elementStack.listIterator(elementStack.size()); if(iter.hasPrevious()) { pw.print("==> "); TemplateElement prev = (TemplateElement) iter.previous(); pw.print(prev.getDescription()); pw.print(" ["); pw.print(prev.getStartLocation()); pw.println("]"); } while(iter.hasPrevious()) { TemplateElement prev = (TemplateElement) iter.previous(); if (prev instanceof UnifiedCall || prev instanceof Include) { String location = prev.getDescription() + " [" + prev.getStartLocation() + "]"; if(location != null && location.length() > 0) { pw.print(" in "); pw.println(location); } } } pw.println("----------"); pw.flush(); }