use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class VarVirtualAttribute method evaluate.
public Object evaluate(Context ctx, Object o) {
VirtualClassAttribute vae = ctx.gt.getVirtualAttributeEval(o.getClass(), name);
if (vae == null) {
BeetlException be = new BeetlException(BeetlException.VIRTUAL_NOT_FOUND);
be.pushToken(token);
throw be;
}
return vae.eval(o, name, ctx);
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class AntlrProgramBuilder method registerNewVar.
// 纪录一个新变量
protected void registerNewVar(ASTNode vas) {
if (pbCtx.hasDefined(vas.token.text) != null) {
GrammarToken token = pbCtx.hasDefined(vas.token.text);
BeetlException ex = new BeetlException(BeetlException.VAR_ALREADY_DEFINED, "已经在第" + token.line + "行定义");
ex.pushToken(vas.token);
throw ex;
}
pbCtx.addVar(vas.token.text);
pbCtx.setVarPosition(vas.token.text, vas);
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class AntlrProgramBuilder method parseAjax.
protected AjaxStatement parseAjax(AjaxStContext ajaxCtx) {
GrammarToken token = null;
String flag = "render";
List<TerminalNode> nodes = ajaxCtx.Identifier();
if (nodes.size() == 1) {
token = this.getBTToken(nodes.get(0).getSymbol());
} else {
token = this.getBTToken(nodes.get(1).getSymbol());
flag = nodes.get(0).getSymbol().getText();
if (!(flag.equals("render") || flag.equals("norender"))) {
BeetlException be = new BeetlException(BeetlException.AJAX_PROPERTY_ERROR, "expect render or norender ,but " + flag);
be.pushToken(token);
throw be;
}
}
BlockContext blockCtx = ajaxCtx.block();
BlockStatement block = (BlockStatement) this.parseBlock(blockCtx.statement(), blockCtx);
AjaxStatement ajaxStat = new AjaxStatement(block, token, flag.equals("render"));
if (this.data.ajaxs == null) {
this.data.ajaxs = new HashMap<String, AjaxStatement>();
}
String anchor = ajaxStat.token.text;
if (this.data.ajaxs.containsKey(anchor)) {
GrammarToken lastToken = this.data.ajaxs.get(anchor).token;
BeetlException ex = new BeetlException(BeetlException.AJAX_ALREADY_DEFINED, "已经在第" + lastToken.line + "行定义");
ex.pushToken(token);
throw ex;
}
this.data.ajaxs.put(anchor, ajaxStat);
return ajaxStat;
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class AntlrProgramBuilder method parseTag.
protected TagStatement parseTag(FunctionTagCallContext fc) {
String id = this.getID(fc.functionNs().Identifier());
ExpressionListContext expListCtx = fc.expressionList();
List<ExpressionContext> list = null;
if (expListCtx != null) {
list = fc.expressionList().expression();
} else {
list = Collections.EMPTY_LIST;
}
Expression[] expList = this.parseExpressionCtxList(list);
if (id.equals("htmltagvar")) {
int line = fc.functionNs().getStart().getLine();
// 标签具有绑定变量功能
Literal l = (Literal) expList[2];
String varList = (String) l.obj;
String[] vars = varList.split(",");
// 定义的变量仅仅在标签体内可见
this.pbCtx.enterBlock();
VarDefineNode[] varDefine = new VarDefineNode[vars.length];
for (int i = 0; i < vars.length; i++) {
VarDefineNode varNode = new VarDefineNode(this.getBTToken(vars[i].trim(), line));
this.pbCtx.addVarAndPostion(varNode);
varDefine[i] = varNode;
}
BlockContext blockCtx = fc.block();
Statement block = parseBlock(blockCtx.statement(), blockCtx);
this.pbCtx.exitBlock();
TagFactory tf = this.gt.getTagFactory(id);
if (tf == null) {
BeetlException ex = new BeetlException(BeetlException.TAG_NOT_FOUND);
ex.pushToken(this.getBTToken(id, fc.functionNs().getStart().getLine()));
throw ex;
}
TagStatement tag = new TagVarBindingStatement(id, expList, block, varDefine, this.getBTToken(id, line));
return tag;
} else {
BlockContext blockCtx = fc.block();
Statement block = parseBlock(blockCtx.statement(), blockCtx);
TagFactory tf = this.gt.getTagFactory(id);
if (tf == null) {
BeetlException ex = new BeetlException(BeetlException.TAG_NOT_FOUND);
ex.pushToken(this.getBTToken(id, fc.functionNs().getStart().getLine()));
throw ex;
}
TagStatement tag = new TagStatement(id, expList, block, this.getBTToken(id, fc.functionNs().getStart().getLine()));
return tag;
}
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class AntlrProgramBuilder method parseAssingInExp.
/**
* 赋值变量
* @param agc
* @return
*/
protected VarRefAssignExpress parseAssingInExp(AssignGeneralInExpContext agc) {
VarRefAssignExpress vas = null;
ExpressionContext expCtx = agc.generalAssignExp().expression();
Expression exp = parseExpress(expCtx);
VarRefContext varRefCtx = agc.generalAssignExp().varRef();
VarRef ref = this.parseVarRefInLeftExpression(varRefCtx);
vas = new VarRefAssignExpress(exp, ref);
if (ref.attributes.length == 0) {
// 变量定义:
Token token = varRefCtx.Identifier().getSymbol();
if (pbCtx.hasDefined(token.getText()) != null) {
registerVar(vas);
return vas;
} else {
BeetlException ex = new BeetlException(BeetlException.VAR_NOT_DEFINED);
ex.pushToken(this.getBTToken(token));
throw ex;
}
}
return vas;
}
Aggregations