package cutils.reflection;
import javax.swing.*;
import java.util.Vector;
public class ReflectUtil {
private Class c;
private Object o;
private MethodList ml;
public ReflectUtil(Object _o) {
c = _o.getClass();
o = _o;
ml = new MethodList(c);
}
public java.lang.reflect.Constructor[] getConstructors() {
return
c.getDeclaredConstructors();
}
public java.lang.reflect.Field[] getFields() {
return c.getDeclaredFields();
}
public java.lang.reflect.Method[] getMethods() {
return c.getDeclaredMethods();
}
public java.lang.reflect.Method[] getAllMethods() {
return ml.getMethods();
}
public Class[] getSuperClasses() {
Class sc = c;
Vector v = new Vector();
v.addElement(c);
while ((sc = sc.getSuperclass()) != null)
v.addElement(sc);
Class ca[] = new Class[v.size()];
v.copyInto(ca);
return ca;
}
public Class[] getSuperInterfaces(Class ca[]) {
Vector v = new Vector();
for (int i = 0; i < ca.length; i++) {
Class newArray[] =
getSuperInterfaces(ca[i]);
for (int j = 0; j < newArray.length; j++)
v.addElement(newArray[j]);
}
Class rc[] = new Class[v.size()];
v.copyInto(rc);
return rc;
}
public Class[] getSuperInterfaces(Class ci) {
return ci.getInterfaces();
}
public Class[] getPublicClassMembers() {
return c.getClasses();
}
public String[] getReadMethodNames() {
java.lang.reflect.Method m[] = getMethods();
java.util.Vector v = new java.util.Vector();
for (int i = 0; i < m.length; i++) {
String s = getName(m[i]);
if (s.startsWith("get") || s.startsWith("is")) {
v.addElement(s);
System.out.println(s);
}
}
String getterArray[] = new String[v.size()];
v.copyInto(getterArray);
return getterArray;
}
public String[] getReadMethodNames(int n) {
java.lang.reflect.Method m[] = getMethodsWithNArgs(n);
return getReadMethodNames(m);
}
private String[] getReadMethodNames(java.lang.reflect.Method[] m) {
Vector v = new Vector();
for (int i = 0; i < m.length; i++) {
String s = getName(m[i]);
if (s.startsWith("get") || s.startsWith("is"))
v.addElement(s);
}
String getterArray[] = new String[v.size()];
v.copyInto(getterArray);
return getterArray;
}
public String[] getWriteMethodNames() {
java.lang.reflect.Method m[] = getMethods();
return getWriteMethodNames(m);
}
public String[] getWriteMethodNames(java.lang.reflect.Method[] m) {
Vector v = new Vector();
for (int i = 0; i < m.length; i++) {
String s = getName(m[i]);
if (s.startsWith("set")) {
v.addElement(s);
System.out.println(s);
}
}
String setterArray[] = new String[v.size()];
for (int i = 0; i < setterArray.length; i++)
setterArray[i] = (String) v.elementAt(i);
return setterArray;
}
public java.lang.reflect.Method getMethod(String s) {
java.lang.reflect.Method m = null;
try {
m = c.getMethod(s, new Class[]{});
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return m;
}
public Object invoke(String methodName) {
java.lang.reflect.Method m = getMethod(methodName);
Object ret = null;
try {
ret = m.invoke(o, null);
} catch (java.lang.reflect.InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return ret;
}
public int getModifiers(java.lang.reflect.Method m) {
return m.getModifiers();
}
public String getModifierString(java.lang.reflect.Method m) {
return java.lang.reflect.Modifier.toString(
getModifiers(m));
}
public static void println(Object o[]) {
for (int i = 0; i < o.length; i++)
System.out.println(o[i]);
}
public static String toString(Object o[]) {
String s = "";
for (int i = 0; i < o.length; i++)
s = s + o[i] + "\n";
return s;
}
public void printInfo() {
System.out.println("Info on class " + getClassName());
System.out.println("Constructors:");
println(getConstructors());
System.out.println("Fields:");
println(getFields());
System.out.println("Methods:");
println(getMethods());
System.out.println("Methods with 0 arguments");
println(getMethodsWithNArgs(0));
System.out.println("read methods");
println(getReadMethodNames());
System.out.println("write methods");
println(getWriteMethodNames());
System.out.println("Classes");
println(getPublicClassMembers());
}
public String getClassName() {
return c.getName();
}
java.lang.reflect.Method[] getMethodsWithNArgs(int n) {
java.lang.reflect.Method m[] = getMethods();
java.util.Vector v = new java.util.Vector();
for (int i = 0; i < m.length; i++) {
Class ca[] = m[i].getParameterTypes();
if (ca.length == n)
v.addElement(m[i]);
}
java.lang.reflect.Method ma[] = new java.lang.reflect.Method[v.size()];
v.copyInto(ma);
return ma;
}
public String getName(java.lang.reflect.Method m) {
return m.getName();
}
public String getInfoString(java.lang.reflect.Method m) {
return
"for method " + m.getName() +
"\nThe modifier = " +
getModifierString(m) +
"\nThe return type =" +
m.getReturnType().getName() +
"\n The arguments for this method are " +
toString(m.getParameterTypes());
}
public void printInfo(java.lang.reflect.Method m) {
System.out.println(getInfoString(m));
}
static class Foo extends JEditorPane
implements Runnable {
public void run() {
}
}
public static void main(String args[]) {
Foo f = new Foo();
ReflectUtil ru = new ReflectUtil(
f);
ru.println(
ru.getSuperInterfaces(ru.getSuperClasses()));
ru.println(ru.getSuperClasses());
}
public void startCommandLineInterpreter() {
String s = null;
String prompt = "enter command:";
while (!(s = getString(prompt)).startsWith("quit"))
try {
prompt = s + "=" + invoke(s);
} catch (Exception e) {
prompt = e.toString();
}
;
}
public static String getString(String prompt) {
return javax.swing.JOptionPane.showInputDialog(prompt);
}
public Class getC() {
return c;
}
}