luehe       2002/07/17 13:06:59

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
                        JspDocumentParser.java Node.java Parser.java
  Log:
  Do not declare tag handler pools for SimpleTag handlers.
  
  Revision  Changes    Path
  1.40      +43 -72    
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.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- Generator.java    17 Jul 2002 00:35:30 -0000      1.39
  +++ Generator.java    17 Jul 2002 20:06:58 -0000      1.40
  @@ -196,15 +196,16 @@
             * already contained in it.
             */
            public void visit(Node.CustomTag n) throws JasperException {
  -             
  -             String name = createTagHandlerPoolName(n.getPrefix(),
  -                                                    n.getShortName(),
  -                                                    n.getAttributes());
  -             n.setTagHandlerPoolName(name);
  -             if (!names.contains(name)) {
  -                 names.add(name);
  -             }
   
  +             if (!n.implementsSimpleTag()) {
  +                 String name = createTagHandlerPoolName(n.getPrefix(),
  +                                                        n.getShortName(),
  +                                                        n.getAttributes());
  +                 n.setTagHandlerPoolName(name);
  +                 if (!names.contains(name)) {
  +                     names.add(name);
  +                 }
  +             }
                visitBody(n);
            }
   
  @@ -1453,11 +1454,9 @@
            TagHandlerInfo handlerInfo = (TagHandlerInfo)
                handlerInfosByShortName.get(n.getShortName());
            if (handlerInfo == null) {
  -             handlerInfo = new TagHandlerInfo(
  -                                         n,
  -                                         n.getTagInfo().getTagClassName(),
  -                                         ctxt.getClassLoader(),
  -                                         err);
  +             handlerInfo = new TagHandlerInfo(n,
  +                                              n.getTagHandlerClass(),
  +                                              err);
                handlerInfosByShortName.put(n.getShortName(), handlerInfo);
            }
   
  @@ -1467,22 +1466,14 @@
            String tagEvalVar = "_jspx_eval_" + baseVar;
            String tagHandlerVar = "_jspx_th_" + baseVar;
   
  -         Class tagHandlerClass = handlerInfo.getTagHandlerClass();
  -         boolean implementsIterationTag = 
  -             IterationTag.class.isAssignableFrom(tagHandlerClass);
  -         boolean implementsBodyTag = 
  -             BodyTag.class.isAssignableFrom(tagHandlerClass);
  -         boolean implementsTryCatchFinally = 
  -             TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
  -         boolean implementsSimpleTag = 
  -             SimpleTag.class.isAssignableFrom(tagHandlerClass);
  +         Class tagHandlerClass = n.getTagHandlerClass();
   
            // If the tag contains no scripting element, generate its codes
            // to a method.
            ServletWriter outSave = null;
            MethodsBuffer methodsBufferSave = null;
               Node.ChildInfo ci = n.getChildInfo();
  -         if (implementsSimpleTag
  +         if (n.implementsSimpleTag()
                    || (ci.isScriptless() && !ci.hasScriptingVars())) {
                // The tag handler and its body code can reside in a separate
                // method if it is scriptless and does not have any scripting
  @@ -1532,17 +1523,14 @@
                   generateLocalVariables( out, n );
               }
   
  -         if (implementsSimpleTag) {
  -             generateCustomDoTag(n, handlerInfo, tagHandlerVar,
  -                                 implementsTryCatchFinally);
  +         if (n.implementsSimpleTag()) {
  +             generateCustomDoTag(n, handlerInfo, tagHandlerVar);
            } else {
                /*
                 * Classic tag handler: Generate code for start element, body,
                 * and end element
                 */
  -             generateCustomStart(n, handlerInfo, tagHandlerVar, tagEvalVar,
  -                                 implementsIterationTag, implementsBodyTag,
  -                                 implementsTryCatchFinally);
  +             generateCustomStart(n, handlerInfo, tagHandlerVar, tagEvalVar);
   
                // visit body
                String tmpParent = parent;
  @@ -1553,12 +1541,10 @@
                parent = tmpParent;
                isSimpleTagHandler = tmpIsSimpleTagHandler;
   
  -             generateCustomEnd(n, tagHandlerVar, tagEvalVar,
  -                               implementsIterationTag, implementsBodyTag,
  -                               implementsTryCatchFinally);
  +             generateCustomEnd(n, tagHandlerVar, tagEvalVar);
            }
   
  -         if (implementsSimpleTag
  +         if (n.implementsSimpleTag()
                    || (ci.isScriptless() && !ci.hasScriptingVars())) {
                // Generate end of method
                if (methodNesting > 0) {
  @@ -1700,10 +1686,7 @@
        private void generateCustomStart(Node.CustomTag n,
                                         TagHandlerInfo handlerInfo,
                                         String tagHandlerVar,
  -                                      String tagEvalVar,
  -                                      boolean implementsIterationTag,
  -                                      boolean implementsBodyTag,
  -                                      boolean implementsTryCatchFinally)
  +                                      String tagEvalVar)
                            throws JasperException {
   
            Class tagHandlerClass = handlerInfo.getTagHandlerClass();
  @@ -1745,7 +1728,7 @@
   
            generateSetters(n, tagHandlerVar, handlerInfo, false);
            
  -            if (implementsTryCatchFinally) {
  +            if (n.implementsTryCatchFinally()) {
                   out.printil("try {");
                   out.pushIndent();
               }
  @@ -1756,7 +1739,7 @@
            out.println(".doStartTag();");
   
            // Synchronize AT_BEGIN and NESTED scripting variables
  -         if (!implementsBodyTag) {
  +         if (!n.implementsBodyTag()) {
                syncScriptingVariables(n, VariableInfo.AT_BEGIN);
                syncScriptingVariables(n, VariableInfo.NESTED);
            }
  @@ -1767,7 +1750,7 @@
                out.println(" != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {");
                out.pushIndent();
                
  -             if (implementsBodyTag) {
  +             if (n.implementsBodyTag()) {
                    out.printin("if (");
                    out.print(tagEvalVar);
                    out.println(" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) 
{");
  @@ -1787,7 +1770,7 @@
                    out.printil("}");
                }
                
  -             if (implementsIterationTag) {
  +             if (n.implementsIterationTag()) {
                    out.printil("do {");
                    out.pushIndent();
                }
  @@ -1796,21 +1779,18 @@
        
        private void generateCustomEnd(Node.CustomTag n,
                                       String tagHandlerVar,
  -                                    String tagEvalVar,
  -                                    boolean implementsIterationTag,
  -                                    boolean implementsBodyTag,
  -                                    boolean implementsTryCatchFinally) {
  +                                    String tagEvalVar) {
   
            VariableInfo[] varInfos = n.getVariableInfos();
            TagVariableInfo[] tagVarInfos = n.getTagVariableInfos();
   
  -         if ((n.getBody() != null) && implementsIterationTag) {
  +         if ((n.getBody() != null) && n.implementsIterationTag()) {
                out.printin("int evalDoAfterBody = ");
                out.print(tagHandlerVar);
                out.println(".doAfterBody();");
   
                // Synchronize AT_BEGIN and NESTED scripting variables
  -             if (implementsBodyTag) {
  +             if (n.implementsBodyTag()) {
                    syncScriptingVariables(n, VariableInfo.AT_BEGIN);
                    syncScriptingVariables(n, VariableInfo.NESTED);
                }
  @@ -1825,7 +1805,7 @@
            }
   
            if (n.getBody() != null) {
  -             if (implementsBodyTag) {
  +             if (n.implementsBodyTag()) {
                    out.printin("if (");
                    out.print(tagEvalVar);
                    out.println(" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE)");
  @@ -1850,7 +1830,7 @@
            syncScriptingVariables(n, VariableInfo.AT_END);
   
            // TryCatchFinally
  -         if (implementsTryCatchFinally) {
  +         if (n.implementsTryCatchFinally()) {
                   out.popIndent(); // try
                out.printil("} catch (Throwable _jspx_exception) {");
                out.pushIndent();
  @@ -1870,7 +1850,7 @@
                out.println(");");
            }
   
  -         if (implementsTryCatchFinally) {
  +         if (n.implementsTryCatchFinally()) {
                   out.popIndent();
                   out.println("}");
            }
  @@ -1884,8 +1864,7 @@
   
        private void generateCustomDoTag(Node.CustomTag n,
                                         TagHandlerInfo handlerInfo,
  -                                      String tagHandlerVar,
  -                                      boolean implementsTryCatchFinally)
  +                                      String tagHandlerVar)
                            throws JasperException {
   
            Class tagHandlerClass = handlerInfo.getTagHandlerClass();
  @@ -1914,7 +1893,7 @@
   
            generateSetters(n, tagHandlerVar, handlerInfo, true);
   
  -            if (implementsTryCatchFinally) {
  +            if (n.implementsTryCatchFinally()) {
                   out.printil("try {");
                   out.pushIndent();
               }
  @@ -1957,7 +1936,7 @@
            syncScriptingVariables(n, VariableInfo.AT_END);
   
            // TryCatchFinally
  -         if (implementsTryCatchFinally) {
  +         if (n.implementsTryCatchFinally()) {
                   out.popIndent(); // try
                out.printil("} catch (Throwable _jspx_exception) {");
                out.pushIndent();
  @@ -2596,23 +2575,15 @@
        /**
         * Constructor.
         *
  -      * @param n The custom tag whose tag handler is to be loaded and
  +      * @param n The custom tag whose tag handler class is to be
         * introspected
  -      * @param tagClassName Name of tag handler class to load
  -      * @param loader Class loader to use
  +      * @param tagHandlerClass Tag handler class
         * @param err Error dispatcher
         */
  -     TagHandlerInfo(Node n, String tagClassName, ClassLoader loader,
  -                    ErrorDispatcher err) throws JasperException {
  -
  -         // Load the tag handler class with the given name
  -         tagHandlerClass = null;
  -         try {
  -             tagHandlerClass = loader.loadClass(tagClassName);
  -         } catch (Exception e) {
  -             err.jspError(n, "jsp.error.unable.loadclass", tagClassName, e);
  -         }
  -
  +     TagHandlerInfo(Node n, Class tagHandlerClass, ErrorDispatcher err)
  +         throws JasperException
  +     {
  +         this.tagHandlerClass = tagHandlerClass;
            this.methodMaps = new Hashtable();
            this.propertyEditorMaps = new Hashtable();
   
  @@ -2636,7 +2607,7 @@
                }
            } catch (IntrospectionException ie) {
                err.jspError(n, "jsp.error.introspect.taghandler",
  -                          tagClassName, ie);
  +                          tagHandlerClass.getName(), ie);
            }
        }
   
  
  
  
  1.6       +12 -4     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java
  
  Index: JspDocumentParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JspDocumentParser.java    16 Jul 2002 19:30:51 -0000      1.5
  +++ JspDocumentParser.java    17 Jul 2002 20:06:58 -0000      1.6
  @@ -427,9 +427,17 @@
            throw new SAXException(err.getString("jsp.error.bad_tag",
                                                 shortName, prefix));
        }
  +     Class tagHandlerClass = null;
  +     try {
  +         tagHandlerClass
  +             = ctxt.getClassLoader().loadClass(tagInfo.getTagClassName());
  +     } catch (Exception e) {
  +         throw new SAXException(err.getString("jsp.error.unable.loadclass",
  +                                              shortName, prefix));
  +     }
          
        return new Node.CustomTag(attrs, start, qName, prefix, shortName,
  -                               tagInfo, parent);
  +                               tagInfo, tagHandlerClass, parent);
       }
   
       /*
  
  
  
  1.17      +39 -4     
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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- Node.java 16 Jul 2002 19:30:51 -0000      1.16
  +++ Node.java 17 Jul 2002 20:06:59 -0000      1.17
  @@ -789,22 +789,37 @@
        private TagData tagData;
        private String tagHandlerPoolName;
        private TagInfo tagInfo;
  +     private Class tagHandlerClass;
        private VariableInfo[] varInfos;
        private int customNestingLevel;
        private boolean hasUnnestedIdAttribute;
           private ChildInfo childInfo;
  +     private boolean implementsIterationTag;
  +     private boolean implementsBodyTag;
  +     private boolean implementsTryCatchFinally;
  +     private boolean implementsSimpleTag;
   
        public CustomTag(Attributes attrs, Mark start, String name,
                         String prefix, String shortName,
  -                      TagInfo tagInfo, Node parent) {
  +                      TagInfo tagInfo, Class tagHandlerClass, Node parent) {
            super(attrs, start, parent);
            this.name = name;
            this.prefix = prefix;
            this.shortName = shortName;
            this.tagInfo = tagInfo;
  +         this.tagHandlerClass = tagHandlerClass;
            this.customNestingLevel = computeCustomNestingLevel();
            this.hasUnnestedIdAttribute = determineHasUnnestedIdAttribute();
               this.childInfo = new ChildInfo();
  +
  +         this.implementsIterationTag = 
  +             IterationTag.class.isAssignableFrom(tagHandlerClass);
  +         this.implementsBodyTag =
  +             BodyTag.class.isAssignableFrom(tagHandlerClass);
  +         this.implementsTryCatchFinally = 
  +             TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
  +         this.implementsSimpleTag = 
  +             SimpleTag.class.isAssignableFrom(tagHandlerClass);
        }
   
        public void accept(Visitor v) throws JasperException {
  @@ -863,6 +878,26 @@
   
        public TagInfo getTagInfo() {
            return tagInfo;
  +     }
  +
  +     public Class getTagHandlerClass() {
  +         return tagHandlerClass;
  +     }
  +
  +     public boolean implementsIterationTag() {
  +         return implementsIterationTag;
  +     }
  +
  +     public boolean implementsBodyTag() {
  +         return implementsBodyTag;
  +     }
  +
  +     public boolean implementsTryCatchFinally() {
  +         return implementsTryCatchFinally;
  +     }
  +
  +     public boolean implementsSimpleTag() {
  +         return implementsSimpleTag;
        }
   
        public TagVariableInfo[] getTagVariableInfos() {
  
  
  
  1.9       +16 -6     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Parser.java       16 Jul 2002 19:30:51 -0000      1.8
  +++ Parser.java       17 Jul 2002 20:06:59 -0000      1.9
  @@ -866,6 +866,7 @@
        * CustomActionScriptlessContent ::= ScriptlessOptionalBody
        */
       private boolean parseCustomTag(Node parent) throws JasperException {
  +
        if (reader.peekChar() != '<') {
            return false;
        }
  @@ -892,7 +893,15 @@
        if (tagInfo == null) {
            err.jspError(start, "jsp.error.bad_tag", shortTagName, prefix);
        }
  -        
  +     Class tagHandlerClass = null;
  +     try {
  +         tagHandlerClass
  +             = ctxt.getClassLoader().loadClass(tagInfo.getTagClassName());
  +     } catch (Exception e) {
  +         err.jspError(start, "jsp.error.unable.loadclass", shortTagName,
  +                      prefix);
  +     }
  +
           // Parse 'CustomActionBody' production:
           // At this point we are committed - if anything fails, we produce
           // a translation error.
  @@ -904,7 +913,7 @@
           // Parse 'CustomActionEnd' production:
        if (reader.matches("/>")) {
            new Node.CustomTag(attrs, start, tagName, prefix, shortTagName,
  -                            tagInfo, parent);
  +                            tagInfo, tagHandlerClass, parent);
            return true;
        }
        
  @@ -919,7 +928,8 @@
               shortTagName).getBodyContent();
   
        Node tagNode = new Node.CustomTag(attrs, start, tagName, prefix,
  -                                       shortTagName, tagInfo, parent);
  +                                       shortTagName, tagInfo,
  +                                       tagHandlerClass, parent);
        parseOptionalBody( tagNode, tagName, bc );
   
        return true;
  
  
  

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

Reply via email to