X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fbind%2FBindable.java;h=c2c0a02400bf091cf3e06acf72160373041273cc;hp=9e5564ebbf72fb995abda48ef577eaf3612adc11;hb=8abe88ea7a5d7b1fc20c45b05e6397dad81e7cdb;hpb=0bf2fced924400a496fb154be71188864296564c diff --git a/src/edu/berkeley/sbp/bind/Bindable.java b/src/edu/berkeley/sbp/bind/Bindable.java index 9e5564e..c2c0a02 100644 --- a/src/edu/berkeley/sbp/bind/Bindable.java +++ b/src/edu/berkeley/sbp/bind/Bindable.java @@ -10,7 +10,7 @@ import java.lang.reflect.*; import java.io.*; import static edu.berkeley.sbp.util.Reflection.*; -public abstract class Bindable { +public abstract class Bindable implements ToJava { public abstract String getSimpleName(); public abstract String toString(); @@ -37,6 +37,15 @@ public abstract class Bindable { 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 void toJava(StringBuffer sb) { + sb.append("Bindable.create("); + sb.append(_method.getDeclaringClass().getName().replace('$','.')); + sb.append(".class.getMethod(\""); + sb.append(_method.getName()); + sb.append("\", "); + appendClassArray(sb, _method.getParameterTypes()); + sb.append("))"); + } } private static class BindableConstructor extends Bindable { @@ -48,6 +57,13 @@ public abstract class Bindable { 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 void toJava(StringBuffer sb) { + sb.append("Bindable.create("); + sb.append(_constructor.getDeclaringClass().getName().replace('$','.')); + sb.append(".class.getConstructor("); + appendClassArray(sb, _constructor.getParameterTypes()); + sb.append("))"); + } } private static class BindableClass extends Bindable { @@ -71,6 +87,27 @@ public abstract class Bindable { ret[i] = fields[i].getName(); return ret; } + public void toJava(StringBuffer sb) { + sb.append("Bindable.create("); + sb.append(_class.getName().replace('$','.')); + sb.append(".class)"); + } + } + + + private static void appendClassArray(StringBuffer sb, Class[] c) { + sb.append("new Class[] {"); + for(int i=0; i