jspnode.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,836 行 · 第 1/4 页

JAVA
1,836
字号
	if (boolean.class.equals(type))	  return expr.evalBoolean(null) ? "true" : "false";	else if (Boolean.class.equals(type))	  return expr.evalBoolean(null) ? "java.lang.Boolean.TRUE" : "java.lang.Boolean.FALSE";	else if (byte.class.equals(type))	  return "(byte) " + expr.evalLong(null);	else if (Byte.class.equals(type))	  return "new java.lang.Byte((byte) " + expr.evalLong(null) + "L)";	else if (short.class.equals(type))	  return "(short) " + expr.evalLong(null);	else if (Short.class.equals(type))	  return "new java.lang.Short((short) " + expr.evalLong(null) + "L)";	else if (int.class.equals(type))	  return "(int) " + expr.evalLong(null);	else if (Integer.class.equals(type))	  return "new java.lang.Integer((int) " + expr.evalLong(null) + "L)";	else if (long.class.equals(type))	  return "" + expr.evalLong(null) + "L";	else if (Long.class.equals(type))	  return "new java.lang.Long(" + expr.evalLong(null) + "L)";	else if (float.class.equals(type))	  return "(float) " + expr.evalDouble(null);	else if (Float.class.equals(type))	  return "new java.lang.Float((float) " + expr.evalDouble(null) + ")";	else if (double.class.equals(type)) {	  double v = expr.evalDouble(null);	  if (Double.isNaN(v))	    return "Double.NaN";	  else	    return "" + v;	}	else if (Double.class.equals(type)) {	  double v = expr.evalDouble(null);	  if (Double.isNaN(v))	    return "new Double(Double.NaN)";	  else	    return "new java.lang.Double(" + v + ")";	}	else if (char.class.equals(type))	  return "((char) " + (int) expr.evalCharacter(null) + ")";	else if (Character.class.equals(type)) {	  // jsp/18s0	  return "new Character((char) " + (int) expr.evalCharacter(null) + ")";	}	else if (String.class.equals(type))	  return "\"" + escapeJavaString(expr.evalString(null)) + "\"";	else if (BigInteger.class.equals(type)) {	  String v = expr.evalBigInteger(null).toString();	  // 18s3	  if (v.equals("") || v.equals("0"))	    return "java.math.BigInteger.ZERO";	  else	    return "new java.math.BigInteger(\"" + v + "\")";	}	else if (BigDecimal.class.equals(type)) {	  String v = expr.evalBigDecimal(null).toString();	  // 18s4	  if (v.equals("") || v.equals("0.0"))	    return "java.math.BigDecimal.ZERO";	  else	    return "new java.math.BigDecimal(\"" + v + "\")";	}	else if (Object.class.equals(type)) {	  Object cValue = expr.evalObject(null);	  String result = generateObject(cValue);	  if (result != null)	    return result;	}	else {	  Object cValue = expr.evalObject(null);	  // jsp/184t	  if ("".equals(cValue))	    return "null";	}      } catch (Throwable e) {	// jsp/18co	// exceptions are caught at runtime	log.log(Level.FINER, e.toString(), e);		log.fine(e.getMessage());      }    }        int exprIndex = _gen.addExpr(value);    String var = "_caucho_expr_" + exprIndex;    if (boolean.class.equals(type))      return var + ".evalBoolean(_jsp_env)";    else if (Boolean.class.equals(type))      return var + ".evalBoolean(_jsp_env) ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE";    else if (byte.class.equals(type))      return "(byte) " + var + ".evalLong(_jsp_env)";    else if (Byte.class.equals(type))      return "new java.lang.Byte((byte) " + var + ".evalLong(_jsp_env))";    else if (short.class.equals(type))      return "(short) " + var + ".evalLong(_jsp_env)";    else if (Short.class.equals(type))      return "new java.lang.Short((short) " + var + ".evalLong(_jsp_env))";    else if (int.class.equals(type))      return "(int) " + var + ".evalLong(_jsp_env)";    else if (Integer.class.equals(type))      return "new java.lang.Integer((int) " + var + ".evalLong(_jsp_env))";    else if (long.class.equals(type))      return var + ".evalLong(_jsp_env)";    else if (Long.class.equals(type))      return "new java.lang.Long(" + var + ".evalLong(_jsp_env))";    else if (float.class.equals(type))      return "(float) " + var + ".evalDouble(_jsp_env)";    else if (Float.class.equals(type))      return "new java.lang.Float((float) " + var + ".evalDouble(_jsp_env))";    else if (double.class.equals(type))      return var + ".evalDouble(_jsp_env)";    else if (Double.class.equals(type))      return "new java.lang.Double(" + var + ".evalDouble(_jsp_env))";    else if (java.math.BigDecimal.class.equals(type))      return "" + var + ".evalBigDecimal(_jsp_env)";    else if (java.math.BigInteger.class.equals(type))      return "" + var + ".evalBigInteger(_jsp_env)";    else if (char.class.equals(type))      return var + ".evalCharacter(_jsp_env)";    else if (Character.class.equals(type))      return "new Character(" + var + ".evalCharacter(_jsp_env))";    else if (String.class.equals(type))      return var + ".evalString(_jsp_env)";    else if (BigInteger.class.equals(type))      return var + ".evalBigInteger(_jsp_env)";    else if (BigDecimal.class.equals(type))      return var + ".evalBigDecimal(_jsp_env)";    else if (Object.class.equals(type))      return var + ".evalObject(_jsp_env)";    else {      return "(" + classToString(type) + ") " + var + ".evalObject(_jsp_env)";    }  }  public void convertParameterValue(JspJavaWriter out, String type, String value)    throws IOException  {    if (type.equals("boolean"))      out.print("java.lang.Boolean.TRUE.equals(" + value + ")");    else if (type.equals("byte"))      out.print("java.lang.Byte.valueOf(" + value + ")");    else if (type.equals("char"))      out.print("java.lang.Character.valueOf(" + value + ")");    else if (type.equals("short"))      out.print("java.lang.Short.valueOf(" + value + ")");    else if (type.equals("int"))      out.print("((java.lang.Integer) " + value + ").intValue()");    else if (type.equals("long"))      out.print("((java.lang.Long) " + value + ").longValue()");    else if (type.equals("float"))      out.print("((java.lang.Float) " + value + ").floatValue()");    else if (type.equals("double"))      out.print("((java.lang.Double) " + value + ").doubleValue()");    else      out.print("(" + type + ")" + value);  }  protected String classToString(Class cl)  {    if (cl.isArray())      return classToString(cl.getComponentType()) + "[]";    else      return cl.getName();  }  /**   * Returns true if the value is a runtime attribute.   */  public boolean hasRuntimeAttribute(String value)    throws JspParseException  {    if (_parseState.isScriptingInvalid()) {      // && value.indexOf("<%=") >= 0) {      return false;      /*      throw error(L.l("Runtime expressions are forbidden here.  Scripting has been disabled either:\n1) disabled by the web.xml scripting-invalid\n2) disabled in a tag's descriptor\n3) forbidden in <jsp:attribute> or <jsp:body> tags."));      */    }            if (value.startsWith("<%=") && value.endsWith("%>"))      return true;    else if (value.startsWith("%=") && value.endsWith("%"))      return true;    else if (value.indexOf("<%=") >= 0 &&             value.indexOf("<%=") < value.indexOf("%>"))      throw error(L.l("interpolated runtime values are forbidden by the JSP spec at '{0}'",                      value));    else      return false;  }  /**   * Returns true if the string has scripting.   */  public boolean hasScripting(String value)  {    try {      return value != null && hasRuntimeAttribute(value);    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * Returns true if the string has scripting.   */  public boolean hasScripting(JspAttribute value)  {    return value != null && value.hasScripting();  }    /**   * Returns true if the value is a runtime attribute.   */  public boolean hasELAttribute(String value)  {    return ! _parseState.isELIgnored() && value.indexOf("${") >= 0;  }    /**   * Returns true if the value is a runtime attribute.   */  public boolean hasDeferredAttribute(String value)  {    if (value.indexOf("#{") < 0)      return false;    else if (isPre21Taglib())      return false;    else      return ! _parseState.isELIgnored();  }    /**   * Returns true if the value is a runtime attribute.   */  public boolean hasELAttribute(String value, boolean isELIgnored)  {    return ! isELIgnored && value.indexOf("${") >= 0;  }    /**   * Returns true if the value is a runtime attribute.   */  public boolean hasDeferredAttribute(String value, boolean isELIgnored)  {    if (isELIgnored)      return false;    else if (value.indexOf("#{") < 0)      return false;    else if (isPre21Taglib())      return false;    else      return true;  }  /**   * Returns the runtime attribute of the value.   */  public String getRuntimeAttribute(String value)    throws Exception  {    if (value.startsWith("<%=") && value.endsWith("%>"))      return value.substring(3, value.length() - 2);    else if (value.startsWith("%=") && value.endsWith("%"))      return value.substring(2, value.length() - 1);    else      return value;  }  /**   * Converts a string-valued expression to the given type.   */  String stringToValue(Class type, String obj)  {    if (boolean.class.equals(type))      return "com.caucho.jsp.PageContextImpl.toBoolean(" + obj + ")";    else if (Boolean.class.equals(type))      return "java.lang.Boolean.valueOf(" + obj + ")";    else if (byte.class.equals(type))      return "java.lang.Byte.parseByte(" + obj + ")";    else if (Byte.class.equals(type))      return "java.lang.Byte.valueOf(" + obj + ")";    else if (char.class.equals(type))      return obj + ".charAt(0)";    else if (Character.class.equals(type))      return "new java.lang.Character(" + obj + ".charAt(0))";    else if (short.class.equals(type))      return "java.lang.Short.parseShort(" + obj + ")";    else if (Short.class.equals(type))      return "java.lang.Short.valueOf(" + obj + ")";    else if (int.class.equals(type))      return "java.lang.Integer.parseInt(" + obj + ")";    else if (Integer.class.equals(type))      return "java.lang.Integer.valueOf(" + obj + ")";    else if (long.class.equals(type))      return "java.lang.Long.parseLong(" + obj + ")";    else if (Long.class.equals(type))      return "java.lang.Long.valueOf(" + obj + ")";    else if (float.class.equals(type))      return "java.lang.Float.parseFloat(" + obj + ")";    else if (Float.class.equals(type))      return "java.lang.Float.valueOf(" + obj + ")";    else if (double.class.equals(type))      return "java.lang.Double.parseDouble(" + obj + ")";    else if (Double.class.equals(type))      return "java.lang.Double.valueOf(" + obj + ")";    else if (type.isAssignableFrom(String.class))      return obj;    else      return null;  }    protected String generateObject(Object obj)  {    if (obj instanceof String)      return "\"" + escapeJavaString((String) obj) + "\"";    else if (obj instanceof Long)      return "new java.lang.Long(" + obj + "L)";    else if (obj instanceof Integer)      return "new java.lang.Integer((int) " + obj + "L)";    else if (obj instanceof Double) {      double v = (Double) obj;      if (Double.isNaN(v))	return "new java.lang.Double(Double.NaN)";      else	return "new java.lang.Double(" + v + ")";    }    else if (obj instanceof Boolean)      return ((Boolean) obj).booleanValue() ? "java.lang.Boolean.TRUE" : "java.lang.Boolean.FALSE";    else      return null;  }    public static String toELObject(String expr, Class type)  {    if (boolean.class.equals(type))      return "((" + expr + ") ? Boolean.TRUE : Boolean.FALSE)";    else if (byte.class.equals(type))      return "new Long(" + expr + ")";    else if (short.class.equals(type))      return "new Long(" + expr + ")";    else if (int.class.equals(type))      return "new Long(" + expr + ")";    else if (long.class.equals(type))      return "new Long(" + expr + ")";    else if (float.class.equals(type))      return "new Double(" + expr + ")";    else if (double.class.equals(type))      return "new Double(" + expr + ")";    else if (char.class.equals(type))      return "String.valueOf(" + expr + ")";    else      return expr;  }  /**   * Escapes a java string.   */  public static String escapeJavaString(String s)  {    if (s == null)      return "";    CharBuffer cb = CharBuffer.allocate();    for (int i = 0; i < s.length(); i++) {      if (s.charAt(i) == '\\')        cb.append("\\\\");      else if (s.charAt(i) == '"')        cb.append("\\\"");      else if (s.charAt(i) == '\n')        cb.append("\\n");      else if (s.charAt(i) == '\r')        cb.append("\\r");      else        cb.append(s.charAt(i));    }    return cb.close();  }  protected Class loadClass(String type)    throws JspParseException  {    if (type == null)      return null;    else {      try {        return _gen.getBeanClass(type);      } catch (Exception e) {        throw new JspParseException(e);      }    }  }  /**   * Creates a parse exception with the proper line information.   */  protected JspParseException error(String msg)  {    return error(msg, null);  }  /**   * Creates a parse exception with the proper line information.   */  protected JspParseException error(String msg, Throwable e)  {    if (_filename != null) {      String lines = _gen.getSourceLines(_sourcePath, _startLine);            return new JspLineParseException(_filename + ":" + _startLine + ": " + msg + lines, e);    }    else      return new JspParseException(msg, e);  }  /**   * Creates a parse exception with the proper line information.   */  protected JspParseException error(Throwable e)  {    if (e instanceof JspLineParseException)      return (JspParseException) e;    else if (_filename == null || e instanceof LineCompileException)      return new JspLineParseException(e);    String msg;        if (e instanceof CompileException)      msg = e.getMessage();    else      msg = String.valueOf(e);        String lines = _gen.getSourceLines(_sourcePath, _startLine);          return new JspLineParseException(_filename + ":" + _startLine + ": " + msg + lines, e);  }  /**   * Returns a printable version of the node.   */  public String toString()  {    if (_name == null)      return "<" + getClass().getName() + ">";    else      return "<" + _name.getName() + ">";  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?