projects
/
sbp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use ordinal pre-sorting rather than on-the-fly compares
[sbp.git]
/
src
/
edu
/
berkeley
/
sbp
/
misc
/
ReflectiveWalker.java
diff --git
a/src/edu/berkeley/sbp/misc/ReflectiveWalker.java
b/src/edu/berkeley/sbp/misc/ReflectiveWalker.java
index
f22f4b8
..
60f8e9b
100644
(file)
--- a/
src/edu/berkeley/sbp/misc/ReflectiveWalker.java
+++ b/
src/edu/berkeley/sbp/misc/ReflectiveWalker.java
@@
-1,3
+1,5
@@
+// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
+
package edu.berkeley.sbp.misc;
import edu.berkeley.sbp.*;
import edu.berkeley.sbp.util.*;
package edu.berkeley.sbp.misc;
import edu.berkeley.sbp.*;
import edu.berkeley.sbp.util.*;
@@
-10,7
+12,7
@@
public class ReflectiveWalker extends StringWalker {
public ReflectiveWalker() { this.target = this; }
public ReflectiveWalker(Object target) { this.target = target; }
private final Object target;
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);
StringBuffer ret = new StringBuffer();
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
@@
-57,7
+59,7
@@
public class ReflectiveWalker extends StringWalker {
/*
public Object walk(Tree<String> tree) {
if (tree.head()!=null) {
/*
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]);
if (m!=null) {
if ((m instanceof Method) && ((Method)m).getReturnType()==Void.TYPE) {
Reflection.fuzzyInvoke(target, m, new Object[0]);
@@
-67,12
+69,18
@@
public class ReflectiveWalker extends StringWalker {
return super.walk(tree);
}
*/
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;
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;
//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;