package org.mozilla.javascript; import com.nominanuda.rhino.ObjectCoercer; import com.nominanuda.zen.common.Tuple2; import com.nominanuda.zen.obj.Obj; import com.nominanuda.zen.obj.wrap.ObjWrapper; import com.nominanuda.zen.obj.wrap.Wrap; public class PluggableWrapMethodArgCoercer extends PluggableMethodArgCoercer { @Override protected Tuple2<ObjectCoercer<Object, Object, Exception>, Integer> findConvertor(Class<?> typeTo, Object valueFrom) { return super.findConvertor(ObjWrapper.class.isAssignableFrom(typeTo) ? Obj.class : typeTo, valueFrom); // convert to Obj if we are to return an ObjWrapper } @Override public Object coerceTypeImpl(Class<?> typeTo, Object valueFrom) { Object result = super.coerceTypeImpl(typeTo, valueFrom); return result instanceof Obj ? Wrap.WF.wrap((Obj) result, typeTo) : result; // if we did it to Obj, wrap it } }