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