コード例 #1
0
ファイル: Break.java プロジェクト: junekee/railo
  @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
              + "]");
    }
  }