luehe       2003/03/27 18:13:03

  Modified:    jasper2/src/share/org/apache/jasper/compiler Compiler.java
                        ELFunctionMapper.java JspDocumentParser.java
                        Node.java Parser.java TagFileProcessor.java
  Log:
  Implemented cleaner separation of custom node construction for custom
  actions implemented via tag handlers vs. custom actions implemented via
  tag files
  
  Revision  Changes    Path
  1.61      +1 -0      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- Compiler.java     24 Mar 2003 21:36:05 -0000      1.60
  +++ Compiler.java     28 Mar 2003 02:13:02 -0000      1.61
  @@ -199,6 +199,7 @@
        // Setup page info area
        pageInfo = new PageInfo(new BeanRepository(ctxt.getClassLoader(),
                                                   errDispatcher));
  +
        JspConfig jspConfig = options.getJspConfig();
        JspConfig.JspProperty jspProperty =
                        jspConfig.findJspProperty(ctxt.getJspFile());
  
  
  
  1.5       +1 -1      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ELFunctionMapper.java
  
  Index: ELFunctionMapper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ELFunctionMapper.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ELFunctionMapper.java     25 Mar 2003 01:49:29 -0000      1.4
  +++ ELFunctionMapper.java     28 Mar 2003 02:13:02 -0000      1.5
  @@ -205,7 +205,7 @@
                    if (k != 0) {
                        ds.append(", ");
                    }
  -                 ds.append(params[k] + ".class");
  +                 ds.append("Class.forName(\"" + params[k] + "\")");
                }
                ds.append("});\n");
                // Put the current name in the global function map
  
  
  
  1.49      +16 -10    
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.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- JspDocumentParser.java    25 Mar 2003 00:57:46 -0000      1.48
  +++ JspDocumentParser.java    28 Mar 2003 02:13:02 -0000      1.49
  @@ -654,7 +654,7 @@
                                                        localName, uri));
        }
        Class tagHandlerClass = null;
  -     if (tagFileInfo == null) {
  +     if (tagInfo != null) {
            String handlerClassName = tagInfo.getTagClassName();
            try {
                tagHandlerClass = ctxt.getClassLoader().loadClass(handlerClassName);
  @@ -663,9 +663,7 @@
                        Localizer.getMessage("jsp.error.loadclass.taghandler",
                                             handlerClassName, qName));
            }
  -     } else {
  -            tagInfo = tagFileInfo.getTagInfo();
  -        }
  +     }
   
        String prefix = "";
        int colon = qName.indexOf(':');
  @@ -673,9 +671,17 @@
            prefix = qName.substring(0, colon);
        }
          
  -     return new Node.CustomTag(qName, prefix, localName, uri, attrs,
  -                               xmlnsAttrs, start, parent, tagInfo,
  -                               tagFileInfo, tagHandlerClass);
  +     Node.CustomTag ret = null;
  +     if (tagInfo != null) {
  +         ret = new Node.CustomTag(qName, prefix, localName, uri, attrs,
  +                                  xmlnsAttrs, start, parent, tagInfo,
  +                                  tagHandlerClass);
  +     } else {
  +         ret = new Node.CustomTag(qName, prefix, localName, uri, attrs,
  +                                  xmlnsAttrs, start, parent, tagFileInfo);
  +     }
  +
  +     return ret;
       }
   
       /*
  
  
  
  1.69      +55 -29    
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.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- Node.java 25 Mar 2003 00:57:46 -0000      1.68
  +++ Node.java 28 Mar 2003 02:13:02 -0000      1.69
  @@ -1239,49 +1239,75 @@
        private Nodes atSTag;
        private Nodes atETag;
   
  +     /*
  +      * Constructor for custom action implemented by tag handler.
  +      */
        public CustomTag(String qName, String prefix, String localName,
                         String uri, Attributes attrs, Mark start, Node parent,
  -                      TagInfo tagInfo, TagFileInfo tagFileInfo,
  +                      TagInfo tagInfo, Class tagHandlerClass) {
  +         this(qName, prefix, localName, uri, attrs, null, start, parent,
  +              tagInfo, tagHandlerClass);
  +     }
  +
  +     /*
  +      * Constructor for custom action implemented by tag handler.
  +      */
  +     public CustomTag(String qName, String prefix, String localName,
  +                      String uri, Attributes attrs, Attributes xmlnsAttrs,
  +                      Mark start, Node parent, TagInfo tagInfo,
                         Class tagHandlerClass) {
  +         super(qName, localName, attrs, xmlnsAttrs, start, parent);
  +
  +         this.uri = uri;
  +         this.prefix = prefix;
  +         this.tagInfo = tagInfo;
  +         this.tagHandlerClass = tagHandlerClass;
  +         this.customNestingLevel = makeCustomNestingLevel();
  +            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);
  +         this.implementsDynamicAttributes = 
  +             DynamicAttributes.class.isAssignableFrom(tagHandlerClass);
  +     }
  +
  +     /*
  +      * Constructor for custom action implemented by tag file.
  +      */
  +     public CustomTag(String qName, String prefix, String localName,
  +                      String uri, Attributes attrs, Mark start, Node parent,
  +                      TagFileInfo tagFileInfo) {
            this(qName, prefix, localName, uri, attrs, null, start, parent,
  -              tagInfo, tagFileInfo, tagHandlerClass);
  +              tagFileInfo);
        }
   
  +     /*
  +      * Constructor for custom action implemented by tag file.
  +      */
        public CustomTag(String qName, String prefix, String localName,
                         String uri, Attributes attrs, Attributes xmlnsAttrs,
  -                      Mark start, Node parent, TagInfo tagInfo,
  -                      TagFileInfo tagFileInfo, Class tagHandlerClass) {
  +                      Mark start, Node parent, TagFileInfo tagFileInfo) {
   
            super(qName, localName, attrs, xmlnsAttrs, start, parent);
  +
            this.uri = uri;
            this.prefix = prefix;
  -         this.tagInfo = tagInfo;
            this.tagFileInfo = tagFileInfo;
  -         this.tagHandlerClass = tagHandlerClass;
  +         this.tagInfo = tagFileInfo.getTagInfo();
            this.customNestingLevel = makeCustomNestingLevel();
               this.childInfo = new ChildInfo();
   
  -         if (tagHandlerClass != null) {
  -             this.implementsIterationTag = 
  -                 IterationTag.class.isAssignableFrom(tagHandlerClass);
  -             this.implementsBodyTag =
  -                 BodyTag.class.isAssignableFrom(tagHandlerClass);
  -             this.implementsTryCatchFinally = 
  -                 TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
  -             this.implementsSimpleTag = 
  -                 SimpleTag.class.isAssignableFrom(tagHandlerClass);
  -             this.implementsDynamicAttributes = 
  -                 DynamicAttributes.class.isAssignableFrom(tagHandlerClass);
  -         } else if (tagFileInfo != null) {
  -             // get the info from tag file
  -             this.implementsIterationTag = false;
  -             this.implementsBodyTag = false;
  -             this.implementsTryCatchFinally = false;
  -             this.implementsSimpleTag = true;
  -             this.implementsDynamicAttributes =
  -                        tagInfo.hasDynamicAttributes();
  -         }
  +         this.implementsIterationTag = false;
  +         this.implementsBodyTag = false;
  +         this.implementsTryCatchFinally = false;
  +         this.implementsSimpleTag = true;
  +         this.implementsDynamicAttributes = tagInfo.hasDynamicAttributes();
        }
   
        public void accept(Visitor v) throws JasperException {
  
  
  
  1.70      +23 -16    
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.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- Parser.java       24 Mar 2003 21:36:05 -0000      1.69
  +++ Parser.java       28 Mar 2003 02:13:02 -0000      1.70
  @@ -1333,7 +1333,7 @@
            err.jspError(start, "jsp.error.bad_tag", shortTagName, prefix);
        }
        Class tagHandlerClass = null;
  -     if (tagFileInfo == null) {
  +     if (tagInfo != null) {
            // Must be a classic tag, load it here.
            // tag files will be loaded later, in TagFileProcessor
            String handlerClassName = tagInfo.getTagClassName();
  @@ -1343,8 +1343,6 @@
                err.jspError(start, "jsp.error.loadclass.taghandler",
                             handlerClassName, tagName);
            }
  -     } else {
  -         tagInfo = tagFileInfo.getTagInfo();
        }
   
           // Parse 'CustomActionBody' production:
  @@ -1357,9 +1355,13 @@
        
           // Parse 'CustomActionEnd' production:
        if (reader.matches("/>")) {
  -         new Node.CustomTag(tagName, prefix, shortTagName, uri, attrs,
  -                            start, parent, tagInfo, tagFileInfo,
  -                            tagHandlerClass);
  +         if (tagInfo != null) {
  +             new Node.CustomTag(tagName, prefix, shortTagName, uri, attrs,
  +                                start, parent, tagInfo, tagHandlerClass);
  +         } else {
  +             new Node.CustomTag(tagName, prefix, shortTagName, uri, attrs,
  +                                start, parent, tagFileInfo);
  +         }
            return true;
        }
        
  @@ -1369,19 +1371,24 @@
   
        // Looking for a body, it still can be empty; but if there is a
        // a tag body, its syntax would be dependent on the type of
  -     // body content declared in TLD.
  +     // body content declared in the TLD.
        String bc;
        if (tagInfo != null) {
            bc = tagInfo.getBodyContent();
  -     } else if (tagFileInfo != null) {
  -         bc = TagInfo.BODY_CONTENT_SCRIPTLESS;
        } else {
  -         bc = TagInfo.BODY_CONTENT_EMPTY;
  +         bc = tagFileInfo.getTagInfo().getBodyContent();
  +     }
  +
  +     Node tagNode = null;
  +     if (tagInfo != null) {
  +         tagNode = new Node.CustomTag(tagName, prefix, shortTagName, uri,
  +                                      attrs, start, parent, tagInfo,
  +                                      tagHandlerClass);
  +     } else {
  +         tagNode = new Node.CustomTag(tagName, prefix, shortTagName, uri,
  +                                      attrs, start, parent, tagFileInfo);
        }
   
  -     Node tagNode = new Node.CustomTag(tagName, prefix, shortTagName, uri,
  -                                       attrs, start, parent, tagInfo,
  -                                       tagFileInfo, tagHandlerClass);
        parseOptionalBody( tagNode, tagName, bc );
   
        return true;
  
  
  
  1.46      +23 -23    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java
  
  Index: TagFileProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- TagFileProcessor.java     26 Feb 2003 00:04:56 -0000      1.45
  +++ TagFileProcessor.java     28 Mar 2003 02:13:02 -0000      1.46
  @@ -134,7 +134,7 @@
           private String displayName = null;
           private String smallIcon = null;
           private String largeIcon = null;
  -        private boolean dynamicAttributes = false;
  +        private boolean dynamicAttrs = false;
           
           private Vector attributeVector;
           private Vector variableVector;
  @@ -164,8 +164,8 @@
                   err.jspError(n, "jsp.error.tagdirective.badbodycontent",
                                bodycontent);
               }
  -            dynamicAttributes= JspUtil.booleanValue(
  -                        n.getAttributeValue("dynamic-attributes"));
  +            dynamicAttrs = JspUtil.booleanValue(
  +                         n.getAttributeValue("dynamic-attributes"));
               smallIcon = n.getAttributeValue("small-icon");
               largeIcon = n.getAttributeValue("large-icon");
               description = n.getAttributeValue("description");
  @@ -304,17 +304,17 @@
               attributeVector.copyInto(tagAttributeInfo);
   
               return new TagInfo(name,
  -                               tagClassName,
  -                               bodycontent,
  -                               description,
  -                               tagLibInfo,
  -                               tei,
  -                               tagAttributeInfo,
  -                               displayName,
  -                               smallIcon,
  -                               largeIcon,
  -                               tagVariableInfos,
  -                               dynamicAttributes);
  +                            tagClassName,
  +                            bodycontent,
  +                            description,
  +                            tagLibInfo,
  +                            tei,
  +                            tagAttributeInfo,
  +                            displayName,
  +                            smallIcon,
  +                            largeIcon,
  +                            tagVariableInfos,
  +                            dynamicAttrs);
           }
       }
   
  @@ -323,6 +323,7 @@
        * in it.  The method is used to obtain the info on the tag file, when the 
        * handler that it represents is referenced.  The tag file is not compiled
        * here.
  +     *
        * @param pc the current ParserController used in this compilation
        * @param name the tag name as specified in the TLD
        * @param tagfile the path for the tagfile
  @@ -330,9 +331,9 @@
        * @return a TagInfo object assembled from the directives in the tag file.
        */
       public static TagInfo parseTagFileDirectives(ParserController pc,
  -                                                 String name,
  -                                                 String path,
  -                                                 TagLibraryInfo tagLibInfo)
  +                                              String name,
  +                                              String path,
  +                                              TagLibraryInfo tagLibInfo)
                           throws JasperException {
   
           ErrorDispatcher err = pc.getCompiler().getErrorDispatcher();
  @@ -353,7 +354,7 @@
   
           /*
            * TODO: need to check for uniqueness of attribute name, variable
  -         * name-given, and vraibale alias.
  +         * name-given, and variable alias.
            */
   
           /*
  @@ -475,10 +476,9 @@
   
   
       /*
  -     * A visitor that scan the page, looking for tag handlers that are tag
  -     * files and compile (if necessary) and load them.
  +     * Visitor which scans the page and looks for tag handlers that are tag
  +     * files, compiling (if necessary) and loading them.
        */ 
  -
       private class TagFileLoaderVisitor extends Node.Visitor {
   
           private Compiler compiler;
  
  
  

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

Reply via email to