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 2010/02/02 11:01:32 UTC

svn commit: r905560 - in /tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler: Generator.java ScriptingVariabler.java

Author: markt
Date: Tue Feb  2 10:01:29 2010
New Revision: 905560

URL: http://svn.apache.org/viewvc?rev=905560&view=rev
Log:
TCSRV-1180. Fix regression in 6.0.24
https://issues.apache.org/bugzilla/show_bug.cgi?id=48616
Definition of scripting variables

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Generator.java
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ScriptingVariabler.java

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Generator.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Generator.java?rev=905560&r1=905559&r2=905560&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Generator.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Generator.java Tue Feb  2 10:01:29 2010
@@ -167,6 +167,26 @@
         return b.toString();
     }
 
+    /**
+     * Finds the <jsp:body> subelement of the given parent node. If not
+     * found, null is returned.
+     */
+    protected static Node.JspBody findJspBody(Node parent) {
+        Node.JspBody result = null;
+
+        Node.Nodes subelements = parent.getBody();
+        for (int i = 0; (subelements != null) && (i < subelements.size()); i++) {
+            Node n = subelements.getNode(i);
+            if (n instanceof Node.JspBody) {
+                result = (Node.JspBody) n;
+                break;
+            }
+        }
+
+        return result;
+    }
+
+
     private String createJspId() throws JasperException {
         if (this.jspIdPrefix == null) {
             StringBuffer sb = new StringBuffer(32);
@@ -978,25 +998,6 @@
             }
         }
 
-        /**
-         * Finds the <jsp:body> subelement of the given parent node. If not
-         * found, null is returned.
-         */
-        private Node.JspBody findJspBody(Node parent) throws JasperException {
-            Node.JspBody result = null;
-
-            Node.Nodes subelements = parent.getBody();
-            for (int i = 0; (subelements != null) && (i < subelements.size()); i++) {
-                Node n = subelements.getNode(i);
-                if (n instanceof Node.JspBody) {
-                    result = (Node.JspBody) n;
-                    break;
-                }
-            }
-
-            return result;
-        }
-
         public void visit(Node.ForwardAction n) throws JasperException {
             Node.JspAttribute page = n.getPage();
 

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ScriptingVariabler.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ScriptingVariabler.java?rev=905560&r1=905559&r2=905560&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ScriptingVariabler.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ScriptingVariabler.java Tue Feb  2 10:01:29 2010
@@ -68,7 +68,7 @@
         public void visit(Node.CustomTag n) throws JasperException {
             setScriptingVars(n, VariableInfo.AT_BEGIN);
             setScriptingVars(n, VariableInfo.NESTED);
-            new ScriptingVariableVisitor(err).visitBody(n);
+            visitBody(n);
             setScriptingVars(n, VariableInfo.AT_END);
         }
 
@@ -84,9 +84,9 @@
             Vector vec = new Vector();
 
             Integer ownRange = null;
+            Node.CustomTag parent = n.getCustomTagParent();
             if (scope == VariableInfo.AT_BEGIN
                     || scope == VariableInfo.AT_END) {
-                Node.CustomTag parent = n.getCustomTagParent();
                 if (parent == null)
                     ownRange = MAX_SCOPE;
                 else
@@ -105,8 +105,11 @@
                     String varName = varInfos[i].getVarName();
                     
                     Integer currentRange = (Integer) scriptVars.get(varName);
-                    if (currentRange == null
-                            || ownRange.compareTo(currentRange) > 0) {
+                    // If a fragment helper has been used for the parent tag
+                    // the scripting variables always need to be declared
+                    if (currentRange == null ||
+                            ownRange.compareTo(currentRange) > 0 ||
+                            parent != null && isImplemetedAsFragment(parent)) {
                         scriptVars.put(varName, ownRange);
                         vec.add(varInfos[i]);
                     }
@@ -128,10 +131,13 @@
                     }
 
                     Integer currentRange = (Integer) scriptVars.get(varName);
-                    if (currentRange == null
-                            || ownRange.compareTo(currentRange) > 0) {
+                    // If a fragment helper has been used for the parent tag
+                    // the scripting variables always need to be declared
+                    if (currentRange == null ||
+                            ownRange.compareTo(currentRange) > 0 ||
+                            parent != null && isImplemetedAsFragment(parent)) {
                         scriptVars.put(varName, ownRange);
-                        vec.add(tagVarInfos[i]);
+                        vec.add(varInfos[i]);
                     }
                 }
             }
@@ -140,6 +146,22 @@
         }
     }
 
+    private static boolean isImplemetedAsFragment(Node.CustomTag n) {
+        // Replicates logic from Generator to determine if a fragment
+        // helper will be used
+        if (n.implementsSimpleTag()) {
+            if (Generator.findJspBody(n) == null) {
+                if (!n.hasEmptyBody()) {
+                    return true;
+                }
+                return false;
+            }
+            return true;
+        }
+        return false;
+    }
+
+
     public static void set(Node.Nodes page, ErrorDispatcher err)
             throws JasperException {
         page.visit(new CustomTagCounter());



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org