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]