class AbstractTemplateBoundariesProcessor
        extends AbstractProcessor implements ITemplateBoundariesProcessor {



    public AbstractTemplateBoundariesProcessor(final TemplateMode templateMode, final int precedence) {
        super(templateMode, precedence);
    }




    public final void processTemplateStart(
            final ITemplateContext context,
            final ITemplateStart templateStart,
            final ITemplateBoundariesStructureHandler structureHandler) {

        try {

            doProcessTemplateStart(context, templateStart, structureHandler);

        } catch (final TemplateProcessingException e) {
            if (templateStart.hasLocation()) {
                if (!e.hasTemplateName()) {
                    e.setTemplateName(templateStart.getTemplateName());
                }
                if (!e.hasLineAndCol()) {
                    e.setLineAndCol(templateStart.getLine(), templateStart.getCol());
                }
            }
            throw e;
        } catch (final Exception e) {
            throw new TemplateProcessingException(
                    "Error during execution of processor '" + this.getClass().getName() + "'",
                    templateStart.getTemplateName(), templateStart.getLine(), templateStart.getCol(), e);
        }

    }


    public final void processTemplateEnd(
            final ITemplateContext context,
            final ITemplateEnd templateEnd,
            final ITemplateBoundariesStructureHandler structureHandler) {<FILL_FUNCTION_BODY>}





    public abstract void doProcessTemplateStart(
            final ITemplateContext context,
            final ITemplateStart templateStart,
            final ITemplateBoundariesStructureHandler structureHandler);


    public abstract void doProcessTemplateEnd(
            final ITemplateContext context,
            final ITemplateEnd templateEnd,
            final ITemplateBoundariesStructureHandler structureHandler);




}


        try {

            doProcessTemplateEnd(context, templateEnd, structureHandler);

        } catch (final TemplateProcessingException e) {
            if (templateEnd.hasLocation()) {
                if (!e.hasTemplateName()) {
                    e.setTemplateName(templateEnd.getTemplateName());
                }
                if (!e.hasLineAndCol()) {
                    e.setLineAndCol(templateEnd.getLine(), templateEnd.getCol());
                }
            }
            throw e;
        } catch (final Exception e) {
            throw new TemplateProcessingException(
                    "Error during execution of processor '" + this.getClass().getName() + "'",
                    templateEnd.getTemplateName(), templateEnd.getLine(), templateEnd.getCol(), e);
        }

    
<methods>public void <init>(org.thymeleaf.templatemode.TemplateMode, int) ,public final int getPrecedence() ,public final org.thymeleaf.templatemode.TemplateMode getTemplateMode() <variables>private final non-sealed int precedence,private final non-sealed org.thymeleaf.templatemode.TemplateMode templateMode