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 + -
显示快捷键?