kinman      02/05/24 16:57:42

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
               jasper2/src/share/org/apache/jasper/resources
                        messages.properties
  Log:
  - Thanks Jan Luehe for the patch.
  
  According to JSP.7.4 ("The Tag Library Descriptor Format"), it is
  illegal for a tag to define scripting variables in both its TLD and
  TagExtraInfo class.
  
  Jasper already enforces this, but its code generator makes separate
  method calls for declaring/synchronizing scripting variables from a
  TLD and those from the TagExtraInfo class, like this:
  
    // Update AT_BEGIN variables
    updateVariableInfos(varInfos, VariableInfo.AT_BEGIN, false);
    updateTagVariableInfos(tagVarInfos, n.getTagData(),
  
  This can be simplified, since if "varInfos" is non-null, "tagVarInfos"
  must be null, and vice-versa.
  
  The proposed patch collapses the above method calls into one.
  
  Also, the code generator makes separate method calls to declare
  AT_BEGIN scripting variables outside the try-finally block, and then
  synchronizing them inside the try-finally block.
  
  Now that try-finally has been flattened, no separate declaration of
  AT_BEGIN variables is required, that is, AT_BEGIN variables can be
  declared when they are first synchronized (after a call to
  doStartTag()), just as NESTED and AT_END variables. This makes
  declareVariableInfos() and declareTagVariableInfos() redundant
  
  As a summary, the attached patch replaces
  
    declareVariableInfos(),
    declareTagVariableInfos(),
    updateVariableInfos(), and
    updateTagVariableInfos()
  
  with a single
  
    syncScriptingVariables().
  
  Revision  Changes    Path
  1.16      +47 -94    
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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Generator.java    24 May 2002 00:35:41 -0000      1.15
  +++ Generator.java    24 May 2002 23:57:42 -0000      1.16
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
 1.15 2002/05/24 00:35:41 kinman Exp $
  - * $Revision: 1.15 $
  - * $Date: 2002/05/24 00:35:41 $
  + * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
 1.16 2002/05/24 23:57:42 kinman Exp $
  + * $Revision: 1.16 $
  + * $Date: 2002/05/24 23:57:42 $
    *
    * ====================================================================
    * 
  @@ -981,11 +981,6 @@
            out.println("();");
            generateSetters(n, tagHandlerVar, handlerInfo);
            
  -         // Declare AT_BEGIN variables
  -         declareVariableInfos(varInfos, VariableInfo.AT_BEGIN);
  -         declareTagVariableInfos(tagVarInfos, n.getTagData(),
  -                                 VariableInfo.AT_BEGIN);
  -         
               if (implementsTryCatchFinally) {
                   out.printil("try {");
                   out.pushIndent();
  @@ -1004,11 +999,10 @@
            boolean isBodyTag
                = BodyTag.class.isAssignableFrom(tagHandlerClass);
   
  -         // Update AT_BEGIN variables
  -         updateVariableInfos(varInfos, VariableInfo.AT_BEGIN, false);
  -         updateTagVariableInfos(tagVarInfos, n.getTagData(),
  -                                VariableInfo.AT_BEGIN, false);
  -
  +         // Declare and synchronize AT_BEGIN scripting variables
  +         syncScriptingVariables(varInfos, tagVarInfos, n.getTagData(),
  +                                VariableInfo.AT_BEGIN, true);
  + 
            if (n.getBody() != null) {
                out.printin("if (");
                out.print(tagEvalVar);
  @@ -1042,14 +1036,13 @@
                }
            }
   
  -         // Declare and update NESTED variables
  -         updateVariableInfos(varInfos, VariableInfo.NESTED, true);
  -         updateTagVariableInfos(tagVarInfos, n.getTagData(),
  -                                VariableInfo.NESTED, true);
  -
  -         // Update AT_BEGIN variables
  -         updateVariableInfos(varInfos, VariableInfo.AT_BEGIN, false);
  -         updateTagVariableInfos(tagVarInfos, n.getTagData(),
  +
  +         // Declare and synchronize NESTED scripting variables
  +         syncScriptingVariables(varInfos, tagVarInfos, n.getTagData(),
  +                                VariableInfo.NESTED, true);
  +
  +         // Synchronize AT_BEGIN scripting variables
  +         syncScriptingVariables(varInfos, tagVarInfos, n.getTagData(),
                                   VariableInfo.AT_BEGIN, false);
        };
        
  @@ -1074,9 +1067,8 @@
                out.println(".doAfterBody() == 
javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN);");
            }
   
  -         // Update AT_BEGIN variables
  -         updateVariableInfos(varInfos, VariableInfo.AT_BEGIN, false);
  -         updateTagVariableInfos(tagVarInfos, n.getTagData(),
  +         // Synchronize AT_BEGIN scripting variables
  +         syncScriptingVariables(varInfos, tagVarInfos, n.getTagData(),
                                   VariableInfo.AT_BEGIN, false);
   
            if (n.getBody() != null) {
  @@ -1125,85 +1117,46 @@
                   out.println(".release();");
            }
   
  -         // Declare and update AT_END variables
  -         updateVariableInfos(varInfos, VariableInfo.AT_END, true);
  -         updateTagVariableInfos(tagVarInfos, n.getTagData(),
  +         // Declare and synchronize AT_END variables
  +         syncScriptingVariables(varInfos, tagVarInfos, n.getTagData(),
                                   VariableInfo.AT_END, true);
   
            n.setEndJavaLine(out.getJavaLine());
        }
   
  -     private void declareVariableInfos(VariableInfo[] varInfos, int scope) {
  -         if (varInfos == null)
  +     private void syncScriptingVariables(VariableInfo[] varInfos,
  +                                         TagVariableInfo[] tagVarInfos,
  +                                         TagData tagData,
  +                                         int scope,
  +                                         boolean declare) {
  +         if ((varInfos == null) && (tagVarInfos == null)) {
                return;
  -         
  -         for (int i=0; i<varInfos.length; i++) {
  -             if ((varInfos[i].getScope() == scope)
  -                     && varInfos[i].getDeclare()) {
  -                 out.printin(varInfos[i].getClassName());
  -                 out.print(" ");
  -                 out.print(varInfos[i].getVarName());
  -                 out.println(" = null;");
  -             }
            }
  -     }
  -
  -     private void updateVariableInfos(VariableInfo[] varInfos, int scope,
  -                                      boolean declare) {
  -         if (varInfos == null)
  -             return;
  -
  -         for (int i=0; i<varInfos.length; i++) {
  -             if (varInfos[i].getScope() == scope) {
  -                 if (declare && varInfos[i].getDeclare()) {
  -                     out.printin(varInfos[i].getClassName() + " ");
  +         if (varInfos != null) {
  +             for (int i=0; i<varInfos.length; i++) {
  +                 if (varInfos[i].getScope() == scope) {
  +                     if (declare && varInfos[i].getDeclare()) {
  +                         out.printin(varInfos[i].getClassName() + " ");
  +                     }
  +                     out.printin(varInfos[i].getVarName());
  +                     out.print(" = (");
  +                     out.print(varInfos[i].getClassName());
  +                     out.print(") pageContext.findAttribute(");
  +                     out.print(quote(varInfos[i].getVarName()));
  +                     out.println(");");
                    }
  -                 out.printin(varInfos[i].getVarName());
  -                 out.print(" = (");
  -                 out.print(varInfos[i].getClassName());
  -                 out.print(") pageContext.findAttribute(");
  -                 out.print(quote(varInfos[i].getVarName()));
  -                 out.println(");");
                }
  -         }               
  -     }
  -
  -     private void declareTagVariableInfos(TagVariableInfo[] tagVarInfos,
  -                                          TagData tagData, int scope) {
  -         if (tagVarInfos == null)
  -             return;
  -
  -            for (int i=0; i<tagVarInfos.length; i++) {
  -             String name = tagVarInfos[i].getNameGiven();
  -             if (name == null) {
  -                 name = tagData.getAttributeString(
  -                                    tagVarInfos[i].getNameFromAttribute());
  -             }
  -                if ((tagVarInfos[i].getScope() == scope)
  -                        && tagVarInfos[i].getDeclare()) {
  -                 out.printin(tagVarInfos[i].getClassName());
  -                 out.print(" ");
  -                 out.print(name);
  -                 out.println(" = null;");
  -             }
  -         }
  -     }
  -
  -     private void updateTagVariableInfos(TagVariableInfo[] tagVarInfos,
  -                                         TagData tagData, int scope,
  -                                         boolean declare) {
  -         if (tagVarInfos == null)
  -             return;
  -
  -            for (int i=0; i<tagVarInfos.length; i++) {
  -             String name = tagVarInfos[i].getNameGiven();
  -             if (name == null) {
  -                 name = tagData.getAttributeString(
  -                                    tagVarInfos[i].getNameFromAttribute());
  -             }
  -                if (tagVarInfos[i].getScope() == scope) {
  -                 if (declare && tagVarInfos[i].getDeclare()) {
  -                     out.printin(tagVarInfos[i].getClassName() + " ");
  +         } else {
  +             for (int i=0; i<tagVarInfos.length; i++) {
  +                 String name = tagVarInfos[i].getNameGiven();
  +                 if (name == null) {
  +                     name = tagData.getAttributeString(
  +                                        tagVarInfos[i].getNameFromAttribute());
  +                 }
  +                 if (tagVarInfos[i].getScope() == scope) {
  +                     if (declare && tagVarInfos[i].getDeclare()) {
  +                         out.printin(tagVarInfos[i].getClassName() + " ");
  +                     }
                    }
                    out.printin(name);
                    out.print(" = (");
  
  
  
  1.7       +2 -2      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties
  
  Index: messages.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- messages.properties       16 May 2002 20:59:21 -0000      1.6
  +++ messages.properties       24 May 2002 23:57:42 -0000      1.7
  @@ -1,4 +1,4 @@
  -# $Id: messages.properties,v 1.6 2002/05/16 20:59:21 kinman Exp $
  +# $Id: messages.properties,v 1.7 2002/05/24 23:57:42 kinman Exp $
   #
   # Default localized string information
   # Localized this the Default Locale as is en_US
  @@ -127,7 +127,7 @@
   jsp.warning.unknown.element.in.attribute=Warning: Unknown element {0} in attribute
   jsp.error.more.than.one.taglib=More than one taglib in the TLD: {0}
   jsp.warning.teiclass.is.null=Could not load TagExtraInfo class {0}: {1}
  -jsp.warning.teiclass.is.nonnull=variable susbelement defined in tld when 
TagExtraInfo class {0} is non-null
  +jsp.warning.teiclass.is.nonnull=variable subelement defined in tld when 
TagExtraInfo class {0} is non-null
   jsp.error.parse.error.in.TLD=Parse Error in the tag library descriptor: {0}
   jsp.error.unable.to.open.TLD=Unable to open the tag library descriptor: {0}
   jsp.buffer.size.zero=Buffer size <= 0
  
  
  

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

Reply via email to