Author: markt Date: Thu May 15 08:04:40 2014 New Revision: 1594811 URL: http://svn.apache.org/r1594811 Log: Revert fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=56516
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?rev=1594811&r1=1594810&r2=1594811&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Thu May 15 08:04:40 2014 @@ -351,7 +351,7 @@ class Generator { page.visit(new TagHandlerPoolVisitor(tagHandlerPoolNames)); } - private void declareScriptingVars(Node.Nodes page) + private void declareTemporaryScriptingVars(Node.Nodes page) throws JasperException { class ScriptingVarVisitor extends Node.Visitor { @@ -364,13 +364,6 @@ class Generator { @Override public void visit(Node.CustomTag n) throws JasperException { - // Declare scripting variables so they are visible to the entire - // page. - declareScriptingVars(n, VariableInfo.AT_BEGIN); - declareScriptingVars(n, VariableInfo.AT_END); - declareScriptingVars(n, VariableInfo.NESTED); - - // Declare temporary scripting variables // XXX - Actually there is no need to declare those // "_jspx_" + varName + "_" + nestingLevel variables when we are // inside a JspFragment. @@ -421,42 +414,6 @@ class Generator { visitBody(n); } - - private void declareScriptingVars(Node.CustomTag n, int scope) { - - List<Object> vec = n.getScriptingVars(scope); - if (vec != null) { - for (int i = 0; i < vec.size(); i++) { - Object elem = vec.get(i); - if (elem instanceof VariableInfo) { - VariableInfo varInfo = (VariableInfo) elem; - if (varInfo.getDeclare()) { - out.printin(varInfo.getClassName()); - out.print(" "); - out.print(varInfo.getVarName()); - out.println(" = null;"); - } - } else { - TagVariableInfo tagVarInfo = (TagVariableInfo) elem; - if (tagVarInfo.getDeclare()) { - String varName = tagVarInfo.getNameGiven(); - if (varName == null) { - varName = n.getTagData().getAttributeString( - tagVarInfo.getNameFromAttribute()); - } else if (tagVarInfo.getNameFromAttribute() != null) { - // alias - continue; - } - out.printin(tagVarInfo.getClassName()); - out.print(" "); - out.print(varName); - out.println(" = null;"); - } - } - } - } - } - } page.visit(new ScriptingVarVisitor()); @@ -710,7 +667,7 @@ class Generator { out.printil("javax.servlet.jsp.PageContext _jspx_page_context = null;"); out.println(); - declareScriptingVars(page); + declareTemporaryScriptingVars(page); out.println(); out.printil("try {"); @@ -2278,7 +2235,8 @@ class Generator { out.println(n.getQName()); n.setBeginJavaLine(out.getJavaLine()); - // Save AT_BEGIN scripting variables + // Declare AT_BEGIN scripting variables + declareScriptingVars(n, VariableInfo.AT_BEGIN); saveScriptingVars(n, VariableInfo.AT_BEGIN); String tagHandlerClassName = tagHandlerClass.getCanonicalName(); @@ -2333,7 +2291,8 @@ class Generator { out.println(" != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {"); out.pushIndent(); - // Save NESTED scripting variables + // Declare NESTED scripting variables + declareScriptingVars(n, VariableInfo.NESTED); saveScriptingVars(n, VariableInfo.NESTED); if (n.implementsBodyTag()) { @@ -2520,8 +2479,9 @@ class Generator { out.printil("}"); } - // synchronize AT_END scripting variables (must do this + // Declare and synchronize AT_END scripting variables (must do this // outside the try/catch/finally block) + declareScriptingVars(n, VariableInfo.AT_END); syncScriptingVars(n, VariableInfo.AT_END); restoreScriptingVars(n, VariableInfo.AT_BEGIN); @@ -2538,7 +2498,8 @@ class Generator { out.printin("// "); out.println(n.getQName()); - // Save AT_BEGIN scripting variables + // Declare AT_BEGIN scripting variables + declareScriptingVars(n, VariableInfo.AT_BEGIN); saveScriptingVars(n, VariableInfo.AT_BEGIN); String tagHandlerClassName = tagHandlerClass.getCanonicalName(); @@ -2591,7 +2552,8 @@ class Generator { // Synchronize AT_BEGIN scripting variables syncScriptingVars(n, VariableInfo.AT_BEGIN); - // synchronize AT_END scripting variables + // Declare and synchronize AT_END scripting variables + declareScriptingVars(n, VariableInfo.AT_END); syncScriptingVars(n, VariableInfo.AT_END); // Resource injection @@ -2600,6 +2562,46 @@ class Generator { n.setEndJavaLine(out.getJavaLine()); } + private void declareScriptingVars(Node.CustomTag n, int scope) { + if (isFragment) { + // No need to declare Java variables, if we inside a + // JspFragment, because a fragment is always scriptless. + return; + } + + List<Object> vec = n.getScriptingVars(scope); + if (vec != null) { + for (int i = 0; i < vec.size(); i++) { + Object elem = vec.get(i); + if (elem instanceof VariableInfo) { + VariableInfo varInfo = (VariableInfo) elem; + if (varInfo.getDeclare()) { + out.printin(varInfo.getClassName()); + out.print(" "); + out.print(varInfo.getVarName()); + out.println(" = null;"); + } + } else { + TagVariableInfo tagVarInfo = (TagVariableInfo) elem; + if (tagVarInfo.getDeclare()) { + String varName = tagVarInfo.getNameGiven(); + if (varName == null) { + varName = n.getTagData().getAttributeString( + tagVarInfo.getNameFromAttribute()); + } else if (tagVarInfo.getNameFromAttribute() != null) { + // alias + continue; + } + out.printin(tagVarInfo.getClassName()); + out.print(" "); + out.print(varName); + out.println(" = null;"); + } + } + } + } + } + /* * This method is called as part of the custom tag's start element. * @@ -3607,7 +3609,7 @@ class Generator { generatePageScopedVariables(tagInfo); - declareScriptingVars(tag); + declareTemporaryScriptingVars(tag); out.println(); out.printil("try {"); Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1594811&r1=1594810&r2=1594811&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Thu May 15 08:04:40 2014 @@ -57,11 +57,6 @@ <subsection name="Jasper"> <changelog> <fix> - <bug>56516</bug>: When tags require scripting variables to be declared, - declare them at the start of the page so that they are always available - to the entire page. (markt) - </fix> - <fix> <bug>56522</bug>: When setting a value for a <code>ValueExpression</code>, ensure that the expected coercions take place such as a <code>null</code> string being coerced to an empty --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org