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/06/25 03:01:55 UTC

cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler JspUtil.java

kinman      2003/06/24 18:01:55

  Modified:    jasper2/src/share/org/apache/jasper/compiler JspUtil.java
  Log:
  - Fix 21067: EL expression that returns an array causes compilation error.
  
  Revision  Changes    Path
  1.38      +42 -3     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.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- JspUtil.java	19 May 2003 21:48:05 -0000	1.37
  +++ JspUtil.java	25 Jun 2003 01:01:55 -0000	1.38
  @@ -579,6 +579,7 @@
           // Note that PageContextImpl implements VariableResolver and
           // the generated Servlet/SimpleTag implements FunctionMapper, so
           // that machinery is already in place (mroth).
  +	targetType = toJavaSourceType(targetType);
   	StringBuffer call = new StringBuffer(
                "(" + targetType + ") "
                  + "org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate"
  @@ -931,6 +932,44 @@
   	}
   
   	return reader;
  +    }
  +
  +    /**
  +     * Class.getName() return arrays in the form "[[[<et>", where et,
  +     * the element type can be one of ZBCDFIJS or L<classname>;
  +     * It is converted into forms that can be understood by javac.
  +     */
  +    private static String toJavaSourceType(String type) {
  +
  +	if (type.charAt(0) != '[') {
  +	    return type;
  + 	}
  +
  +	int dims = 1;
  +	String t = null;
  +	for (int i = 1; i < type.length(); i++) {
  +	    if (type.charAt(i) == '[') {
  +		dims++;
  +	    } else {
  +		switch (type.charAt(i)) {
  +		case 'Z': t = "boolean"; break;
  +		case 'B': t = "byte"; break;
  +		case 'C': t = "char"; break;
  +		case 'D': t = "double"; break;
  +		case 'F': t = "float"; break;
  +		case 'I': t = "int"; break;
  +		case 'J': t = "long"; break;
  +		case 'S': t = "short"; break;
  +		case 'L': t = type.substring(i+1, type.indexOf(';')); break;
  +		}
  +		break;
  +	    }
  +	}
  +	StringBuffer resultType = new StringBuffer(t);
  +	for (; dims > 0; dims--) {
  +	    resultType.append("[]");
  +	}
  +	return resultType.toString();
       }
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org