kinman      2003/03/24 17:49:29

  Modified:    jasper2/src/share/org/apache/jasper/compiler
                        ELFunctionMapper.java ELNode.java Validator.java
  Log:
  - Reuse a previous function mapper if it contains all the functions in
    the current expression.
  
  Revision  Changes    Path
  1.4       +37 -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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ELFunctionMapper.java     25 Mar 2003 00:07:10 -0000      1.3
  +++ ELFunctionMapper.java     25 Mar 2003 01:49:29 -0000      1.4
  @@ -96,6 +96,12 @@
   
       class ELFunctionVisitor extends Node.Visitor {
        
  +     /**
  +      * Use a global name map to facilitate reuse of function maps.
  +      * The key used is prefix:function:uri.
  +      */
  +     private HashMap gMap = new HashMap();
  +
        public void visit(Node.ParamAction n) throws JasperException {
            doMap(n.getValue());
        }
  @@ -174,8 +180,15 @@
                return;
            }
   
  +         // Reuse a previous map if possible
  +         String decName = matchMap(functions);
  +         if (decName != null) {
  +             el.setMapName(decName);
  +             return;
  +         }
  +     
            // Generate declaration for the map statically
  -         String decName = getMapName();
  +         decName = getMapName();
            ss.append("static private 
org.apache.jasper.runtime.ProtectedFunctionMapper " + decName + ";\n");
            ds.append("  " + decName + " = 
org.apache.jasper.runtime.ProtectedFunctionMapper.getInstance();\n");
   
  @@ -195,8 +208,31 @@
                    ds.append(params[k] + ".class");
                }
                ds.append("});\n");
  +             // Put the current name in the global function map
  +             gMap.put(f.getPrefix() + ':' + f.getName() + ':' + f.getUri(),
  +                      decName);
            }
            el.setMapName(decName);
  +     }
  +
  +     private String matchMap(ArrayList functions) {
  +
  +         String mapName = null;
  +         for (int i = 0; i < functions.size(); i++) {
  +             ELNode.Function f = (ELNode.Function)functions.get(i);
  +             String temName = (String) gMap.get(f.getPrefix() + ':' +
  +                                     f.getName() + ':' + f.getUri());
  +             if (temName != null) {
  +                 if (mapName == null) {
  +                     mapName = temName;
  +                 }
  +                 else if (! temName.equals(mapName)) {
  +                     // If not all in the previous match, then no match.
  +                     return null;
  +                 }
  +             }
  +         }
  +         return mapName;
        }
   
        private String getMapName() {
  
  
  
  1.3       +9 -0      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ELNode.java
  
  Index: ELNode.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ELNode.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ELNode.java       25 Mar 2003 00:07:10 -0000      1.2
  +++ ELNode.java       25 Mar 2003 01:49:29 -0000      1.3
  @@ -145,6 +145,7 @@
   
        private String prefix;
        private String name;
  +     private String uri;
        private FunctionInfo functionInfo;
        private String methodName;
        private String[] parameters;
  @@ -164,6 +165,14 @@
   
        public String getName() {
            return name;
  +     }
  +
  +     public void setUri(String uri) {
  +         this.uri = uri;
  +     }
  +
  +     public String getUri() {
  +         return uri;
        }
   
        public void setFunctionInfo(FunctionInfo f) {
  
  
  
  1.98      +4 -3      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java
  
  Index: Validator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java,v
  retrieving revision 1.97
  retrieving revision 1.98
  diff -u -r1.97 -r1.98
  --- Validator.java    25 Mar 2003 00:57:46 -0000      1.97
  +++ Validator.java    25 Mar 2003 01:49:29 -0000      1.98
  @@ -1248,6 +1248,7 @@
                        err.jspError(n, "jsp.error.noFunction", function);
                    }
                    // Skip TLD function uniqueness check.  Done by Schema ?
  +                 func.setUri(uri);
                    func.setFunctionInfo(funcInfo);
                    processSignature(func);
                }
  
  
  

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

Reply via email to