checkpoint
[sbp.git] / src / edu / berkeley / sbp / util / Reflection.java
index 5c13668..fd43a45 100644 (file)
@@ -40,6 +40,7 @@ public final class Reflection {
             Object[] ret = (Object[])Array.newInstance(c.getComponentType(), 1);
             ret[0] = o;
             return ret;
+        } else if (c==int.class && o instanceof Number) { return o;
         } else {
             throw new Error("unable to cast " + o + " from " + o.getClass().getName() + " to " + c.getName());
         }
@@ -50,6 +51,31 @@ public final class Reflection {
         return (Object[])Array.newInstance(c, i);
     }
 
+    public static String indent(String s, int indent) {
+        if (s.indexOf('\n')==-1) return s;
+        StringBuffer ret = new StringBuffer();
+        for(int i=0; i<s.length(); i++) {
+            char c = s.charAt(i);
+            ret.append(c);
+            if (c=='\n')
+                for(int j=0; j<indent; j++)
+                    ret.append(' ');
+        }
+        return ret.toString();
+    }
+
+    public static String show(Object o) {
+        if (o==null) return "null";
+        if (! (o instanceof Object[])) return o.toString() + " : " + o.getClass().getName();
+        Object[] arr = (Object[])o;
+        StringBuffer ret = new StringBuffer();
+        ret.append(o.getClass().getComponentType().getName());
+        ret.append("[]:\n");
+        for(int i=0; i<arr.length; i++)
+            ret.append(indent(show(arr[i]), 4) + "\n");
+        return ret.toString();
+    }
+
     public static Object lub(Object argo) {
         if (argo instanceof Object[]) return lub((Object[])argo);
         return argo;
@@ -145,6 +171,10 @@ public final class Reflection {
         if ((c.getModifiers() & Modifier.INTERFACE) != 0) return false;
         return true;
     }
+    public static boolean isStatic(Field f) {
+        if ((f.getModifiers() & Modifier.STATIC) != 0) return true;
+        return false;
+    }
 
     public static Field getField(Class c, String s) {
         try {
@@ -152,6 +182,18 @@ public final class Reflection {
                 if (f.getName().equals(s))
                     return f;
         } catch (Exception e) { }
+        if (c.getSuperclass()==null || c.getSuperclass()==c) return null;
+        return getField(c.getSuperclass(), s);
+    }
+    public static Field getField(Class c, int i) {
+        try {
+            for(Field f : c.getDeclaredFields()) {
+                if (isStatic(f)) continue;
+                return f;
+            }
+            if (c.getSuperclass()==null || c.getSuperclass()==c) return null;
+            return getField(c.getSuperclass(), i);
+        } catch (Exception e) { }
         return null;
     }