public abstract Annotation[][] getArgAnnotations();
public abstract String[] getArgNames();
+ public abstract Class[] getArgTypes();
public static Bindable create(Object o) {
if (o instanceof Class) return new BindableClass((Class)o);
return null;
}
+ public Binding createBinding(final int[] map) {
+ return new Binding() {
+ public Object invoke(Object[] o) {
+ int max = 0;
+ for(int i=0; i<map.length; i++) max = Math.max(map[i], max);
+ Object[] o2 = new Object[max+1];
+ for(int i=0; i<o.length; i++) o2[map[i]] = o[i];
+ return impose(o2);
+ }
+ };
+ }
+
private static class BindableMethod extends Bindable {
private final Method _method;
public String toString() { return "BindableMethod["+_method+"]"; }
public Object impose(Object[] fields) { return Reflection.impose(_method, fields); }
public Annotation[][] getArgAnnotations() { return _method.getParameterAnnotations(); }
public String[] getArgNames() { return new String[_method.getParameterTypes().length]; }
+ public Class[] getArgTypes() { return _method.getParameterTypes(); }
public void toJava(StringBuffer sb) {
sb.append("Bindable.create(");
sb.append(_method.getDeclaringClass().getName().replace('$','.'));
public Object impose(Object[] fields) { return Reflection.impose(_constructor, fields); }
public Annotation[][] getArgAnnotations() { return _constructor.getParameterAnnotations(); }
public String[] getArgNames() { return new String[_constructor.getParameterTypes().length]; }
+ public Class[] getArgTypes() { return _constructor.getParameterTypes(); }
public void toJava(StringBuffer sb) {
sb.append("Bindable.create(");
sb.append(_constructor.getDeclaringClass().getName().replace('$','.'));
ret[i] = fields[i].getName();
return ret;
}
+ public Class[] getArgTypes() {
+ Field[] fields = _class.getFields();
+ Class[] ret = new Class[fields.length];
+ for(int i=0; i<fields.length; i++)
+ ret[i] = fields[i].getType();
+ return ret;
+ }
public void toJava(StringBuffer sb) {
sb.append("Bindable.create(");
sb.append(_class.getName().replace('$','.'));