X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fbind%2FBindable.java;h=a51996e144c4cac89f2cc3b5b94802f755741a6a;hb=aa4e862db418a090b37b2d70c72fc9e0d1a4265c;hp=7c620c94bd4024717ac27123f1867dccf132a184;hpb=34202c7836b0f48a034f38e4477623d512d0b2d5;p=sbp.git diff --git a/src/edu/berkeley/sbp/bind/Bindable.java b/src/edu/berkeley/sbp/bind/Bindable.java index 7c620c9..a51996e 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.*; @@ -8,6 +10,7 @@ import java.util.*; import java.lang.annotation.*; import java.lang.reflect.*; import java.io.*; +import java.security.*; import static edu.berkeley.sbp.util.Reflection.*; public abstract class Bindable implements ToJava { @@ -22,6 +25,11 @@ public abstract class Bindable implements ToJava { 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); if (o instanceof Method) return new BindableMethod((Method)o); @@ -29,31 +37,14 @@ 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 _method.getAnnotation(c); } + public A getAnnotation(final Class c) { return _method.getAnnotation(c); } 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]; } @@ -124,6 +115,8 @@ public abstract class Bindable implements ToJava { } + // Helpers ////////////////////////////////////////////////////////////////////////////// + private static void appendClassArray(StringBuffer sb, Class[] c) { sb.append("new Class[] {"); for(int i=0; i