You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/05/15 10:04:40 UTC

svn commit: r1594811 - in /tomcat/trunk: java/org/apache/jasper/compiler/Generator.java webapps/docs/changelog.xml

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org