From: remm Date: Sat, 4 Nov 2006 02:11:17 +0000 (+0000) Subject: - Expose the EL type through the Root node to be able to determine the EL type for... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b6617a3f165f5fc653398751b45925ca8b2fe27d;p=tomcat7.0 - Expose the EL type through the Root node to be able to determine the EL type for JspAttribute. git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@471096 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/jasper/compiler/ELNode.java b/java/org/apache/jasper/compiler/ELNode.java index 84399fa3b..3ee629e94 100644 --- a/java/org/apache/jasper/compiler/ELNode.java +++ b/java/org/apache/jasper/compiler/ELNode.java @@ -45,9 +45,11 @@ abstract class ELNode { public static class Root extends ELNode { private ELNode.Nodes expr; + private char type; - Root(ELNode.Nodes expr) { + Root(ELNode.Nodes expr, char type) { this.expr = expr; + this.type = type; } public void accept(Visitor v) throws JasperException { @@ -57,6 +59,10 @@ abstract class ELNode { public ELNode.Nodes getExpression() { return expr; } + + public char getType() { + return type; + } } /** @@ -195,7 +201,7 @@ abstract class ELNode { } } - public Iterator iterator() { + public Iterator iterator() { return list.iterator(); } @@ -224,6 +230,7 @@ abstract class ELNode { public String getMapName() { return mapName; } + } /* diff --git a/java/org/apache/jasper/compiler/ELParser.java b/java/org/apache/jasper/compiler/ELParser.java index c93d9adf4..e8cba0221 100644 --- a/java/org/apache/jasper/compiler/ELParser.java +++ b/java/org/apache/jasper/compiler/ELParser.java @@ -71,7 +71,7 @@ public class ELParser { } ELNode.Nodes elexpr = parser.parseEL(); if (!elexpr.isEmpty()) { - parser.expr.add(new ELNode.Root(elexpr)); + parser.expr.add(new ELNode.Root(elexpr, parser.type)); } } return parser.expr; diff --git a/java/org/apache/jasper/compiler/Validator.java b/java/org/apache/jasper/compiler/Validator.java index 0acfbb1c0..74ad7e5d8 100644 --- a/java/org/apache/jasper/compiler/Validator.java +++ b/java/org/apache/jasper/compiler/Validator.java @@ -39,7 +39,6 @@ import javax.servlet.jsp.tagext.ValidationMessage; import org.apache.el.lang.ELSupport; import org.apache.jasper.Constants; import org.apache.jasper.JasperException; -import org.apache.jasper.JspCompilationContext; import org.apache.jasper.el.ELContextImpl; import org.xml.sax.Attributes; @@ -91,7 +90,6 @@ class Validator { DirectiveVisitor(Compiler compiler) throws JasperException { this.pageInfo = compiler.getPageInfo(); this.err = compiler.getErrorDispatcher(); - JspCompilationContext ctxt = compiler.getCompilationContext(); } public void visit(Node.IncludeDirective n) throws JasperException { @@ -582,7 +580,6 @@ class Validator { public void visit(Node.SetProperty n) throws JasperException { JspUtil.checkAttributes("SetProperty", n, setPropertyAttrs, err); - String name = n.getTextAttribute("name"); String property = n.getTextAttribute("property"); String param = n.getTextAttribute("param"); String value = n.getAttributeValue("value"); @@ -816,7 +813,7 @@ class Validator { if (jspAttrsSize > 0) { jspAttrs = new Node.JspAttribute[jspAttrsSize]; } - Hashtable tagDataAttrs = new Hashtable(attrsSize); + Hashtable tagDataAttrs = new Hashtable(attrsSize); checkXmlAttributes(n, jspAttrs, tagDataAttrs); checkNamedAttributes(n, jspAttrs, attrsSize, tagDataAttrs); @@ -1010,7 +1007,7 @@ class Validator { * considered a dynamic attribute. */ private void checkXmlAttributes(Node.CustomTag n, - Node.JspAttribute[] jspAttrs, Hashtable tagDataAttrs) + Node.JspAttribute[] jspAttrs, Hashtable tagDataAttrs) throws JasperException { TagInfo tagInfo = n.getTagInfo(); @@ -1166,7 +1163,8 @@ class Validator { * attributes */ private void checkNamedAttributes(Node.CustomTag n, - Node.JspAttribute[] jspAttrs, int start, Hashtable tagDataAttrs) + Node.JspAttribute[] jspAttrs, int start, + Hashtable tagDataAttrs) throws JasperException { TagInfo tagInfo = n.getTagInfo(); @@ -1259,10 +1257,21 @@ class Validator { // validate expression syntax if string contains // expression(s) ELNode.Nodes el = ELParser.parse(value); + + boolean deferred = false; + Iterator nodes = el.iterator(); + while (nodes.hasNext()) { + ELNode node = nodes.next(); + if (node instanceof ELNode.Root) { + if (((ELNode.Root) node).getType() == '#') { + deferred = true; + } + } + } if (el.containsEL() && !pageInfo.isELIgnored() - && ((!pageInfo.isDeferredSyntaxAllowedAsLiteral() && value.startsWith("#{")) - || value.startsWith("${"))) { + && ((!pageInfo.isDeferredSyntaxAllowedAsLiteral() && deferred) + || !deferred)) { validateFunctions(el, n); @@ -1487,7 +1496,7 @@ class Validator { throws JasperException { FunctionInfo funcInfo = func.getFunctionInfo(); String signature = funcInfo.getFunctionSignature(); - ArrayList params = new ArrayList(); + ArrayList params = new ArrayList(); // Signature is of the form // S ( ',' )* )? ')' @@ -1520,14 +1529,14 @@ class Validator { class ValidateFunctionMapper extends FunctionMapper { - private HashMap fnmap = new java.util.HashMap(); + private HashMap fnmap = new HashMap(); public void mapFunction(String fnQName, Method method) { fnmap.put(fnQName, method); } public Method resolveFunction(String prefix, String localName) { - return (Method) this.fnmap.get(prefix + ":" + localName); + return this.fnmap.get(prefix + ":" + localName); } } @@ -1584,15 +1593,12 @@ class Validator { */ static class TagExtraInfoVisitor extends Node.Visitor { - private PageInfo pageInfo; - private ErrorDispatcher err; /* * Constructor */ TagExtraInfoVisitor(Compiler compiler) { - this.pageInfo = compiler.getPageInfo(); this.err = compiler.getErrorDispatcher(); }