use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class BeetlAntlrErrorStrategy method reportInputMismatch.
protected void reportInputMismatch(@NotNull Parser recognizer, @NotNull InputMismatchException e) {
Token t1 = recognizer.getInputStream().LT(-1);
String msg = "缺少输入在 " + getTokenErrorDisplay(t1) + " 后面, 期望 " + e.getExpectedTokens().toString(recognizer.getTokenNames());
BeetlException exception = new BeetlParserException(BeetlException.PARSER_MISS_ERROR, msg, e);
// exception.token = this.getGrammarToken(e.getOffendingToken());
exception.pushToken(this.getGrammarToken(t1));
throw exception;
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class BeetlAntlrErrorStrategy method reportMissingToken.
protected void reportMissingToken(@NotNull Parser recognizer) {
if (inErrorRecoveryMode(recognizer)) {
return;
}
beginErrorCondition(recognizer);
// Token t = recognizer.getCurrentToken();
Token t = recognizer.getTokenStream().LT(-1);
IntervalSet expecting = getExpectedTokens(recognizer);
String expect = expecting.toString(recognizer.getTokenNames());
if (expects.containsKey(expect)) {
expect = expects.get(expect);
}
if (expect.equals("'>>'")) {
expect = "'模板的占位结束符号'";
}
String tokenStr = getTokenErrorDisplay(t);
String msg = "缺少输入 " + expect + " 在 " + tokenStr + " 后面";
BeetlException exception = new BeetlParserException(BeetlException.PARSER_MISS_ERROR, msg);
exception.pushToken(this.getGrammarToken(t));
throw exception;
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class FormatExpression method evaluateValue.
public Object evaluateValue(Object o, Context ctx) {
Format format = null;
if (name != null) {
format = ctx.gt.getFormat(name);
} else {
if (o == null)
return null;
format = ctx.gt.getDefaultFormat(o.getClass());
}
if (format == null) {
BeetlException ex = new BeetlException(BeetlException.FORMAT_NOT_FOUND);
ex.pushToken(token);
throw ex;
}
try {
if (format instanceof ContextFormat) {
return ((ContextFormat) format).format(o, pattern, ctx);
} else {
return format.format(o, pattern);
}
} catch (Exception e) {
BeetlException ex = new BeetlException(BeetlException.NATIVE_CALL_EXCEPTION, "调用格式化函数抛出异常", e);
ex.pushToken(token);
throw ex;
}
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class FunctionExpression method evaluate.
public Object evaluate(Context ctx) {
Function fn = ctx.gt.getFunction(name);
if (fn == null) {
// 检查html实现
Resource resource = getResource(ctx.gt, name);
if (resource.getResourceLoader().exist(resource.getId())) {
fn = new FileFunctionWrapper(resource.getId());
} else {
BeetlException ex = new BeetlException(BeetlException.FUNCTION_NOT_FOUND);
ex.pushToken(token);
throw ex;
}
}
Object[] paras = new Object[exps.length];
for (int i = 0; i < paras.length; i++) {
paras[i] = exps[i].evaluate(ctx);
}
Object value = null;
try {
value = fn.call(paras, ctx);
} catch (BeetlException ex) {
ex.pushToken(token);
throw ex;
} catch (RuntimeException ex) {
BeetlException be = new BeetlException(BeetlException.NATIVE_CALL_EXCEPTION, "调用方法出错 " + name, ex);
be.pushToken(this.token);
throw be;
}
Object ret = null;
if (vas == null) {
ret = value;
} else {
for (VarAttribute attr : vas) {
try {
value = attr.evaluate(ctx, value);
} catch (BeetlException ex) {
ex.pushToken(attr.token);
throw ex;
} catch (RuntimeException ex) {
BeetlException be = new BeetlException(BeetlException.ATTRIBUTE_INVALID, "属性访问出错", ex);
be.pushToken(attr.token);
throw be;
}
if (value == null) {
if (hasSafe) {
return safeExp == null ? null : safeExp.evaluate(ctx);
} else {
BeetlException be = new BeetlException(BeetlException.ERROR, "空指针 ");
be.pushToken(attr.token);
throw be;
}
}
}
ret = value;
}
if (ret == null && hasSafe) {
return safeExp == null ? null : safeExp.evaluate(ctx);
} else {
return ret;
}
}
use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.
the class VarRefAssignExpress method evaluate.
public Object evaluate(Context ctx) {
Object value = exp.evaluate(ctx);
if (lastVarAttribute == null) {
ctx.vars[varIndex] = value;
return value;
}
Object obj = varRef.evaluateUntilLast(ctx);
Object key = null;
if (lastVarAttribute instanceof VarSquareAttribute) {
key = (((VarSquareAttribute) lastVarAttribute).exp).evaluate(ctx);
} else {
key = lastVarAttribute.name;
}
try {
ObjectAA.defaultObjectAA().setValue(obj, key, value);
} catch (ClassCastException ex) {
BeetlException bx = new BeetlException(BeetlException.ATTRIBUTE_INVALID, ex);
bx.pushToken(lastVarAttribute.token);
throw bx;
} catch (BeetlException be) {
be.pushToken(lastVarAttribute.token);
throw be;
}
return value;
}
Aggregations