You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ki...@apache.org on 2003/03/29 02:58:51 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler ELFunctionMapper.java JspUtil.java
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: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org