kinman      2002/06/13 15:56:11

  Modified:    jasper2/src/share/org/apache/jasper/compiler Collector.java
                        Generator.java Node.java
  Log:
  - Moved the logc for detecting scripting variables in tags to Collector,
    and fixed a bug in the logic.
  
  Revision  Changes    Path
  1.2       +16 -2     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Collector.java
  
  Index: Collector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Collector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Collector.java    5 Jun 2002 22:01:33 -0000       1.1
  +++ Collector.java    13 Jun 2002 22:56:11 -0000      1.2
  @@ -88,6 +88,7 @@
        private boolean usebeanSeen = false;
        private boolean includeActionSeen = false;
        private boolean setPropertySeen = false;
  +     private boolean hasScriptingVars = false;
   
        public void visit(Node.ParamAction n) throws JasperException {
            if (n.getValue().isExpression()) {
  @@ -151,6 +152,8 @@
            includeActionSeen = false;
            boolean setPropertySeenSave = setPropertySeen;
            setPropertySeen = false;
  +         boolean hasScriptingVarsSave = hasScriptingVars;
  +         hasScriptingVars = false;
   
            // Scan attribute list for expressions
            Node.JspAttribute[] attrs = n.getJspAttributes();
  @@ -163,17 +166,28 @@
   
               visitBody(n);
   
  +         if (!hasScriptingVars) {
  +             // For some reason, varInfos is null when var is not defined
  +             // in TEI, but tagVarInfos is empty array when var is not
  +             // defined in tld.
  +             hasScriptingVars = n.getVariableInfos() != null || 
  +                     (n.getTagVariableInfos() != null
  +                      && n.getTagVariableInfos().length > 0);
  +         }
  +
            // Record if the tag element and its body contains any scriptlet.
            n.setScriptless(! scriptingElementSeen);
            n.setHasUsebean(usebeanSeen);
            n.setHasIncludeAction(includeActionSeen);
            n.setHasSetProperty(setPropertySeen);
  +         n.setHasScriptingVars(hasScriptingVars);
   
            // Propagate value of scriptingElementSeen up.
            scriptingElementSeen = scriptingElementSeen || scriptingElementSeenSave;
            usebeanSeen = usebeanSeen || usebeanSeenSave;
            setPropertySeen = setPropertySeen || setPropertySeenSave;
            includeActionSeen = includeActionSeen || includeActionSeenSave;
  +         hasScriptingVars = hasScriptingVars || hasScriptingVarsSave;
   
               curTagNesting--;
           }
  
  
  
  1.30      +5 -12     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- Generator.java    13 Jun 2002 18:56:18 -0000      1.29
  +++ Generator.java    13 Jun 2002 22:56:11 -0000      1.30
  @@ -1101,18 +1101,11 @@
            // to a method.
            ServletWriter outSave = null;
            MethodsBuffer methodsBufferSave = null;
  -         boolean generateTagMethod = false;
  -         if (n.isScriptless() && n.getVariableInfos() == null &&
  -                     (n.getTagVariableInfos() == null
  -                      || n.getTagVariableInfos().length == 0)) {
  +         if (n.isScriptless() && !n.hasScriptingVars()) {
                // The tag handler and its body code can reside in a separate
                // method if it is scriptless and does not have any scripting
                // variable defined.
  -             // For some reason, varInfos is null when var is not defined
  -             // in TEI, but tagVarInfos is empty array when var is not
  -             // defined in tld.
   
  -             generateTagMethod = true;
                String tagMethod = "_jspx_meth_" + baseVar;
   
                // Generate a call to this method
  @@ -1177,7 +1170,7 @@
            generateCustomEnd(n, handlerInfo.getTagHandlerClass(),
                              tagHandlerVar, tagEvalVar);
   
  -         if (generateTagMethod) {
  +         if (n.isScriptless() && !n.hasScriptingVars()) {
                // Generate end of method
                if (methodNesting > 0) {
                    out.printil("return false;");
  
  
  
  1.14      +12 -3     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java
  
  Index: Node.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Node.java 13 Jun 2002 18:56:18 -0000      1.13
  +++ Node.java 13 Jun 2002 22:56:11 -0000      1.14
  @@ -669,6 +669,7 @@
        private boolean hasUsebean;
        private boolean hasIncludeAction;
        private boolean hasSetProperty;
  +     private boolean hasScriptingVars;
        private String tagHandlerPoolName;
        private TagInfo tagInfo;
        private VariableInfo[] varInfos;
  @@ -757,6 +758,14 @@
   
        public boolean isHasSetProperty() {
            return hasSetProperty;
  +     }
  +
  +     public void setHasScriptingVars(boolean s) {
  +         hasScriptingVars = s;
  +     }
  +
  +     public boolean hasScriptingVars() {
  +         return hasScriptingVars;
        }
   
        public void setTagHandlerPoolName(String s) {
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to