X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fedu%2Fberkeley%2Fsbp%2Fbind%2FBindable.java;h=e3ee82f9615c0148ce6f913d012e27e5f102a3ee;hb=3ee451bce342d4bb61ad6235ba57bdf817bfdd1a;hp=0e2da13b635d23badfa8fa02f03418867fe08b79;hpb=f8dec42308b5eb1196db5bf56bb2f5426b4a76af;p=sbp.git diff --git a/src/edu/berkeley/sbp/bind/Bindable.java b/src/edu/berkeley/sbp/bind/Bindable.java index 0e2da13..e3ee82f 100644 --- a/src/edu/berkeley/sbp/bind/Bindable.java +++ b/src/edu/berkeley/sbp/bind/Bindable.java @@ -1,3 +1,5 @@ +// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license + package edu.berkeley.sbp.bind; import edu.berkeley.sbp.util.*; @@ -20,6 +22,12 @@ public abstract class Bindable implements ToJava { public abstract Annotation[][] getArgAnnotations(); public abstract String[] getArgNames(); + public abstract Class[] getArgTypes(); + + public Binding createBinding() { return new SimpleBinding(); } + public Binding createBinding(final int[] map) { return new SimpleBinding(map); } + public Binding createBinding(final int[] map, Object prepend) { return new SimpleBinding(map, prepend); } + public static Bindable create(Object o) { if (o instanceof Class) return new BindableClass((Class)o); @@ -28,6 +36,8 @@ public abstract class Bindable implements ToJava { return null; } + // Subclasses ////////////////////////////////////////////////////////////////////////////// + private static class BindableMethod extends Bindable { private final Method _method; public String toString() { return "BindableMethod["+_method+"]"; } @@ -37,6 +47,7 @@ public abstract class Bindable implements ToJava { 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('$','.')); @@ -57,6 +68,7 @@ public abstract class Bindable implements ToJava { 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 +99,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