Mercurial > hg > jslab
view examples/util/ClassInfo.java @ 1:5df24c91468d
Oh my what a mess.
author | samer |
---|---|
date | Fri, 05 Apr 2019 16:26:00 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
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]); } } }