class AbstractStandardConditionalVisibilityTagProcessor extends AbstractAttributeTagProcessor {

    /*
     * It is IMPORTANT THAT THIS CLASS DOES NOT EXTEND FROM AbstractStandardExpressionAttributeTagProcessor because
     * such thing would mean that the expression would be evaluated in the parent class, and this would affect
     * the th:case attribute processor, because no shortcut would be possible: once one "th:case" evaluates to true,
     * the rest of th:case in the same th:switch should not be evaluated AT ALL.
     */


    protected AbstractStandardConditionalVisibilityTagProcessor(
            final TemplateMode templateMode, final String dialectPrefix,
            final String attrName, final int precedence) {
        super(templateMode, dialectPrefix, null, false, attrName, true, precedence, true);
    }



    @Override
    protected final void doProcess(
            final ITemplateContext context,
            final IProcessableElementTag tag,
            final AttributeName attributeName, final String attributeValue,
            final IElementTagStructureHandler structureHandler) {<FILL_FUNCTION_BODY>}


    protected abstract boolean isVisible(
            final ITemplateContext context,
            final IProcessableElementTag tag,
            final AttributeName attributeName, final String attributeValue);


}


        final boolean visible = isVisible(context, tag, attributeName, attributeValue);

        if (!visible) {
            structureHandler.removeElement();
        }

    
<methods><variables>private final non-sealed boolean removeAttribute