Mercurial > hg > jslab
diff examples/util/ClassInfo.java @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/util/ClassInfo.java Tue Jan 17 17:50:20 2012 +0000 @@ -0,0 +1,97 @@ +package eg.util; +import samer.core.*; +import samer.core.shells.*; +import samer.core.types.*; +import samer.core.Agent.*; +import java.lang.reflect.*; +import java.util.*; + +public class ClassInfo implements Agent, Observer +{ + VString clname = new VString("class"); + VBoolean all = new VBoolean("all",false);; + Class cl; + + public ClassInfo() + { + clname.addObserver(this); + all.addObserver(this); + Shell.register(this); + Shell.exposeCommands(this); + } + + public void getCommands(Registry r) { + r.add("class").add("interfaces") + .add("methods").add("fields").add("superclass") + .add("verbose", all.value); + } + + public void execute(String cmd, Environment env) throws Exception + { + if (cmd.equals("class")) { + clname.value = X.string(env.datum(),clname.value); + clname.changed(); + } else if (cmd.equals("methods")) { + Method mths[]; + + if (all.value) mths = cl.getMethods(); + else mths = cl.getDeclaredMethods(); + + Shell.print("Methods: "); + for (int i=0;i<mths.length; i++) { + Shell.print("\t"+mths[i]); + } + + } else if (cmd.equals("fields")) { + Field flds[]; + + if (all.value) flds = cl.getFields(); + else flds = cl.getDeclaredFields(); + + Shell.print("Fields: "); + for (int i=0;i<flds.length; i++) { + Shell.print("\t"+flds[i]); + } + } else if (cmd.equals("interfaces")) { + Class ifaces[] = cl.getInterfaces(); + Shell.print("Interfaces: "); + for (int i=0;i<ifaces.length; i++) { + Shell.print("\t"+ifaces[i]); + } + } else if (cmd.equals("superclass")) { + setClass(cl.getSuperclass()); + } else if (cmd.equals("verbose")) { + all.value = X._bool(env.datum(),!all.value); + all.changed(); + } + } + + public void update(Observable o, Object src) + { + if (clname.equals(o) && src!=this) { // &&& + try { setClass(clname.value); } + catch (Exception ex) {} + } + } + + private void setClass(String n) throws Exception { + setClass(Class.forName(n)); + } + + private void setClass(Class c) throws Exception + { + clname.value = c.getName(); + clname.changed(this); + cl = c; + + Constructor cons[] = cl.getConstructors(); + + Shell.print("\nClass: "+cl); + Shell.print("\textends "+cl.getSuperclass()); + Shell.print("constructors"); + for (int i=0;i<cons.length; i++) { + Shell.print("\t"+cons[i]); + } + } +} +