Search in sources :

Example 1 with AstDeferredExpression

use of org.apache.el.parser.AstDeferredExpression in project tomcat70 by apache.

the class ExpressionBuilder method createNodeInternal.

private static final Node createNodeInternal(String expr) throws ELException {
    if (expr == null) {
        throw new ELException(MessageFactory.get("error.null"));
    }
    Node n = cache.get(expr);
    if (n == null) {
        try {
            n = (new ELParser(new StringReader(expr))).CompositeExpression();
            // validate composite expression
            int numChildren = n.jjtGetNumChildren();
            if (numChildren == 1) {
                n = n.jjtGetChild(0);
            } else {
                Class<?> type = null;
                Node child = null;
                for (int i = 0; i < numChildren; i++) {
                    child = n.jjtGetChild(i);
                    if (child instanceof AstLiteralExpression)
                        continue;
                    if (type == null)
                        type = child.getClass();
                    else {
                        if (!type.equals(child.getClass())) {
                            throw new ELException(MessageFactory.get("error.mixed", expr));
                        }
                    }
                }
            }
            if (n instanceof AstDeferredExpression || n instanceof AstDynamicExpression) {
                n = n.jjtGetChild(0);
            }
            cache.put(expr, n);
        } catch (Exception e) {
            throw new ELException(MessageFactory.get("error.parseFail", expr), e);
        }
    }
    return n;
}
Also used : AstDeferredExpression(org.apache.el.parser.AstDeferredExpression) Node(org.apache.el.parser.Node) AstDynamicExpression(org.apache.el.parser.AstDynamicExpression) StringReader(java.io.StringReader) ELException(javax.el.ELException) ELParser(org.apache.el.parser.ELParser) AstLiteralExpression(org.apache.el.parser.AstLiteralExpression) ELException(javax.el.ELException)

Example 2 with AstDeferredExpression

use of org.apache.el.parser.AstDeferredExpression in project tomcat70 by apache.

the class ExpressionBuilder method build.

private Node build() throws ELException {
    Node n = createNodeInternal(this.expression);
    this.prepare(n);
    if (n instanceof AstDeferredExpression || n instanceof AstDynamicExpression) {
        n = n.jjtGetChild(0);
    }
    return n;
}
Also used : AstDeferredExpression(org.apache.el.parser.AstDeferredExpression) Node(org.apache.el.parser.Node) AstDynamicExpression(org.apache.el.parser.AstDynamicExpression)

Example 3 with AstDeferredExpression

use of org.apache.el.parser.AstDeferredExpression in project tomcat by apache.

the class ExpressionBuilder method createNodeInternal.

private static final Node createNodeInternal(String expr) throws ELException {
    if (expr == null) {
        throw new ELException(MessageFactory.get("error.null"));
    }
    Node n = expressionCache.get(expr);
    if (n == null) {
        ELParser parser = parserCache.pop();
        try {
            if (parser == null) {
                parser = new ELParser(new StringReader(expr));
            } else {
                parser.ReInit(new StringReader(expr));
            }
            n = parser.CompositeExpression();
            // validate composite expression
            int numChildren = n.jjtGetNumChildren();
            if (numChildren == 1) {
                n = n.jjtGetChild(0);
            } else {
                Class<?> type = null;
                Node child = null;
                for (int i = 0; i < numChildren; i++) {
                    child = n.jjtGetChild(i);
                    if (child instanceof AstLiteralExpression) {
                        continue;
                    }
                    if (type == null) {
                        type = child.getClass();
                    } else {
                        if (!type.equals(child.getClass())) {
                            throw new ELException(MessageFactory.get("error.mixed", expr));
                        }
                    }
                }
            }
            if (n instanceof AstDeferredExpression || n instanceof AstDynamicExpression) {
                n = n.jjtGetChild(0);
            }
            expressionCache.put(expr, n);
        } catch (Exception e) {
            throw new ELException(MessageFactory.get("error.parseFail", expr), e);
        } finally {
            if (parser != null) {
                parserCache.push(parser);
            }
        }
    }
    return n;
}
Also used : AstDeferredExpression(org.apache.el.parser.AstDeferredExpression) Node(org.apache.el.parser.Node) AstDynamicExpression(org.apache.el.parser.AstDynamicExpression) StringReader(java.io.StringReader) ELException(jakarta.el.ELException) ELParser(org.apache.el.parser.ELParser) AstLiteralExpression(org.apache.el.parser.AstLiteralExpression) ELException(jakarta.el.ELException)

Example 4 with AstDeferredExpression

use of org.apache.el.parser.AstDeferredExpression in project tomcat by apache.

the class ExpressionBuilder method build.

private Node build() throws ELException {
    Node n = createNodeInternal(this.expression);
    this.prepare(n);
    if (n instanceof AstDeferredExpression || n instanceof AstDynamicExpression) {
        n = n.jjtGetChild(0);
    }
    return n;
}
Also used : AstDeferredExpression(org.apache.el.parser.AstDeferredExpression) Node(org.apache.el.parser.Node) AstDynamicExpression(org.apache.el.parser.AstDynamicExpression)

Aggregations

AstDeferredExpression (org.apache.el.parser.AstDeferredExpression)4 AstDynamicExpression (org.apache.el.parser.AstDynamicExpression)4 Node (org.apache.el.parser.Node)4 StringReader (java.io.StringReader)2 AstLiteralExpression (org.apache.el.parser.AstLiteralExpression)2 ELParser (org.apache.el.parser.ELParser)2 ELException (jakarta.el.ELException)1 ELException (javax.el.ELException)1