1 29 30 package com.caucho.quercus.function; 31 32 import com.caucho.quercus.env.Env; 33 import com.caucho.quercus.env.Value; 34 import com.caucho.quercus.expr.Expr; 35 36 39 public class ExtValueMarshal extends Marshal 40 { 41 public static final ExtValueMarshal MARSHAL = new ExtValueMarshal(); 42 43 public boolean isReadOnly() 44 { 45 return false; 46 } 47 48 public Object marshal(Env env, Expr expr, Class expectedClass) 49 { 50 return marshal(env, expr.eval(env), expectedClass); 51 } 52 53 public Object marshal(Env env, Value value, Class expectedClass) 54 { 55 if (value == null || ! value.isset()) 56 return null; 57 58 value = value.toValue(); 60 61 if (expectedClass.isAssignableFrom(value.getClass())) 62 return value; 63 else { 64 String className = expectedClass.getName(); 65 int p = className.lastIndexOf('.'); 66 className = className.substring(p + 1); 67 68 String valueClassName = value.getClass().getName(); 69 p = valueClassName.lastIndexOf('.'); 70 valueClassName = valueClassName.substring(p + 1); 71 72 env.warning(L.l("'{0}' of type `{1}' is an unexpected argument, expected {2}", 73 value, valueClassName, className)); 74 75 return null; 76 } 77 } 78 79 public Value unmarshal(Env env, Object value) 80 { 81 return (Value) value; 82 } 83 } 84 | Popular Tags |