X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fedu%2Fberkeley%2Fsbp%2Fbind%2FBindable.java;h=7c620c94bd4024717ac27123f1867dccf132a184;hb=34202c7836b0f48a034f38e4477623d512d0b2d5;hp=c2c0a02400bf091cf3e06acf72160373041273cc;hpb=8abe88ea7a5d7b1fc20c45b05e6397dad81e7cdb;p=sbp.git diff --git a/src/edu/berkeley/sbp/bind/Bindable.java b/src/edu/berkeley/sbp/bind/Bindable.java index c2c0a02..7c620c9 100644 --- a/src/edu/berkeley/sbp/bind/Bindable.java +++ b/src/edu/berkeley/sbp/bind/Bindable.java @@ -20,6 +20,7 @@ public abstract class Bindable implements ToJava { 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); @@ -28,6 +29,25 @@ public abstract class Bindable implements ToJava { return null; } + public Binding createBinding() { + return new Binding() { + public Object invoke(Object[] o) { + return impose(o); + } + }; + } + public Binding createBinding(final int[] map) { + return new Binding() { + public Object invoke(Object[] o) { + int max = 0; + for(int i=0; i A getAnnotation(Class c) { return _constructor.getAnnotation(c); } 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('$','.')); @@ -87,6 +109,13 @@ public abstract class Bindable implements ToJava { 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