kinman      2003/03/28 17:58:50

  Modified:    jasper2/src/share/org/apache/jasper/compiler
                        ELFunctionMapper.java JspUtil.java
  Log:
  - Allow arrays in function signatures.
  
  Revision  Changes    Path
  1.7       +26 -4     
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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ELFunctionMapper.java     28 Mar 2003 02:18:52 -0000      1.6
  +++ ELFunctionMapper.java     29 Mar 2003 01:58:50 -0000      1.7
  @@ -173,9 +173,6 @@
            el.visit(fv);
            ArrayList functions = fv.funcs;
   
  -         // TODO Some optimization here: if the fmap has only one entry,
  -         // if it was generated before, use it.
  -
            if (functions.size() == 0) {
                return;
            }
  @@ -205,7 +202,29 @@
                    if (k != 0) {
                        ds.append(", ");
                    }
  -                 ds.append(params[k] + ".class");
  +                 int iArray = params[k].indexOf('[');
  +                 if (iArray < 0) {
  +                     ds.append(params[k] + ".class");
  +                 }
  +                 else {
  +                     String baseType = params[k].substring(0, iArray);
  +                     ds.append("java.lang.reflect.Array.newInstance(");
  +                     ds.append(baseType);
  +                     ds.append(".class,");
  +
  +                     // Count the number of array dimension
  +                     int aCount = 0;
  +                     for (int jj = iArray; jj < params[k].length(); jj++ ) {
  +                         if (params[k].charAt(jj) == '[') {
  +                             aCount++;
  +                         }
  +                     }
  +                     if (aCount == 1) {
  +                         ds.append("0).getClass()");
  +                     } else {
  +                         ds.append("new int[" + aCount + "]).getClass()");
  +                     }
  +                 }
                }
                ds.append("});\n");
                // Put the current name in the global function map
  @@ -230,6 +249,9 @@
                        // If not all in the previous match, then no match.
                        return null;
                    }
  +             } else if (mapName != null) {
  +                 // If not all in the previous match, then no match.
  +                 return null;
                }
            }
            return mapName;
  
  
  
  1.35      +35 -13    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java
  
  Index: JspUtil.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- JspUtil.java      19 Mar 2003 20:51:34 -0000      1.34
  +++ JspUtil.java      29 Mar 2003 01:58:50 -0000      1.35
  @@ -461,24 +461,46 @@
        */
       public static Class toClass(String type, ClassLoader loader)
            throws ClassNotFoundException {
  +
  +     Class c = null;
  +     int i0 = type.indexOf('[');
  +     int dims = 0;
  +     if (i0 > 0) {
  +         // This is an array.  Count the dimensions
  +         for (int i = 0; i < type.length(); i++) {
  +             if (type.charAt(i) == '[')
  +                 dims++;
  +         }
  +         type = type.substring(0, i0);
  +     }
  +
        if ("boolean".equals(type))
  -         return boolean.class;
  +         c = boolean.class;
        else if ("char".equals(type))
  -         return char.class;
  +         c = char.class;
        else if ("byte".equals(type))
  -         return byte.class;
  +         c =  byte.class;
        else if ("short".equals(type))
  -         return short.class;
  +         c = short.class;
        else if ("int".equals(type))
  -         return int.class;
  +         c = int.class;
        else if ("long".equals(type))
  -         return long.class;
  +         c = long.class;
        else if ("float".equals(type))
  -         return float.class;
  +         c = float.class;
        else if ("double".equals(type))
  -         return double.class;
  -     else
  -         return loader.loadClass(type);
  +         c = double.class;
  +     else if (type.indexOf('[') < 0)
  +         c = loader.loadClass(type);
  +
  +     if (dims == 0)
  +         return c;
  +
  +     if (dims == 1)
  +         return java.lang.reflect.Array.newInstance(c, 1).getClass();
  +
  +     // Array of more than i dimension
  +     return java.lang.reflect.Array.newInstance(c, new int[dims]).getClass();
       }
   
       /**
  
  
  

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

Reply via email to