@Override public void evaluate(Tag tag, TagLibTag libTag) throws EvaluatorException { String ns = libTag.getTagLib().getNameSpaceAndSeparator(); String loopName = ns + "loop"; String whileName = ns + "while"; // label String label = null; Attribute attrLabel = tag.getAttribute("label"); if (attrLabel != null) { TagBreak tb = (TagBreak) tag; label = variableToString(tag, attrLabel, null); if (label != null) { tb.setLabel(label = label.trim()); tag.removeAttribute("label"); } else if (ASMUtil.isLiteralAttribute(tag, attrLabel, ASMUtil.TYPE_STRING, false, true)) { LitString ls = (LitString) CastString.toExprString(tag.getAttribute("label").getValue()); label = ls.getString(); if (!StringUtil.isEmpty(label, true)) { tb.setLabel(label = label.trim()); tag.removeAttribute("label"); } else label = null; } } // no base tag found if (!ASMUtil.hasAncestorBreakFCStatement(tag, label)) { if (tag.isScriptBase()) { if (StringUtil.isEmpty(label)) throw new EvaluatorException( "Wrong Context, " + libTag.getName() + " must be inside a looping statement or tag"); throw new EvaluatorException( "Wrong Context, " + libTag.getName() + " must be inside a looping statement or tag with the label [" + label + "]"); } if (StringUtil.isEmpty(label)) throw new EvaluatorException( "Wrong Context, tag " + libTag.getFullName() + " must be inside a " + loopName + " or " + whileName + " tag"); throw new EvaluatorException( "Wrong Context, tag " + libTag.getFullName() + " must be inside a " + loopName + " or " + whileName + " tag with the label [" + label + "]"); } }