checkpoint
[sbp.git] / src / edu / berkeley / sbp / util / Reflection.java
index de614d0..42267ce 100644 (file)
@@ -4,8 +4,8 @@ import java.lang.reflect.*;
 
 /** Random reflection-related utilities */
 public final class Reflection {
-
-    private static Object rebuild(Object o, Class c) {
+    
+    public static Object rebuild(Object o, Class c) {
         //System.out.println("rebuild " + o + " (a " + (o==null?null:o.getClass().getName()) + ") " + c);
         if (o==null || c.isAssignableFrom(o.getClass())) return o;
         if ((c == Character.class || c == Character.TYPE) && o instanceof String && ((String)o).length()==1) return new Character(((String)o).charAt(0));
@@ -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());
         }
@@ -140,4 +141,35 @@ public final class Reflection {
         return o+"";
     }
 
+    public static boolean isConcrete(Class c) {
+        if ((c.getModifiers() & Modifier.ABSTRACT) != 0) return false;
+        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 {
+            for(Field f : c.getDeclaredFields())
+                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;
+    }
+
 }