public ReflectiveWalker() { this.target = this; }
public ReflectiveWalker(Object target) { this.target = target; }
private final Object target;
- private String normalize(String s) {
+ public static String mangle(String s) {
StringBuffer ret = new StringBuffer();
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
/*
public Object walk(Tree<String> tree) {
if (tree.head()!=null) {
- Member m = member("$"+normalize(tree.head()), 0, false);
+ Member m = member("$"+mangle(tree.head()), 0, false);
if (m!=null) {
if ((m instanceof Method) && ((Method)m).getReturnType()==Void.TYPE) {
Reflection.fuzzyInvoke(target, m, new Object[0]);
return super.walk(tree);
}
*/
+ public void walk(String tag) {
+ if (tag==null) return;
+ Member m = member(mangle(tag), 0, false);
+ if (m!=null) Reflection.fuzzyInvoke(target, m);
+ }
+ protected Object defaultWalk(String tag, Object[] argo) { return super.walk(tag, argo); }
public Object walk(String tag, Object[] argo) {
if (argo.length==0) return super.walk(tag, argo);
if (argo==null) return tag;
if (tag==null || "".equals(tag)) return argo;
- Member m = member(normalize(tag), argo.length, argo.length>0);
- if (m==null) return super.walk(tag, argo);
+ Member m = tag==null ? null : member(mangle(tag), argo.length, false);
+ if (m==null) return defaultWalk(tag, argo);
//System.out.println("preparing to invoke method " + (m==null ? "null" : (m.toString())) + " for sequence " + (owner()+"."+tag));
if (m != null) return Reflection.fuzzyInvoke(target, m, argo);
if (argo.length==0) return null;