annotate examples/util/ClassInfo.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 package eg.util;
samer@0 2 import samer.core.*;
samer@0 3 import samer.core.shells.*;
samer@0 4 import samer.core.types.*;
samer@0 5 import samer.core.Agent.*;
samer@0 6 import java.lang.reflect.*;
samer@0 7 import java.util.*;
samer@0 8
samer@0 9 public class ClassInfo implements Agent, Observer
samer@0 10 {
samer@0 11 VString clname = new VString("class");
samer@0 12 VBoolean all = new VBoolean("all",false);;
samer@0 13 Class cl;
samer@0 14
samer@0 15 public ClassInfo()
samer@0 16 {
samer@0 17 clname.addObserver(this);
samer@0 18 all.addObserver(this);
samer@0 19 Shell.register(this);
samer@0 20 Shell.exposeCommands(this);
samer@0 21 }
samer@0 22
samer@0 23 public void getCommands(Registry r) {
samer@0 24 r.add("class").add("interfaces")
samer@0 25 .add("methods").add("fields").add("superclass")
samer@0 26 .add("verbose", all.value);
samer@0 27 }
samer@0 28
samer@0 29 public void execute(String cmd, Environment env) throws Exception
samer@0 30 {
samer@0 31 if (cmd.equals("class")) {
samer@0 32 clname.value = X.string(env.datum(),clname.value);
samer@0 33 clname.changed();
samer@0 34 } else if (cmd.equals("methods")) {
samer@0 35 Method mths[];
samer@0 36
samer@0 37 if (all.value) mths = cl.getMethods();
samer@0 38 else mths = cl.getDeclaredMethods();
samer@0 39
samer@0 40 Shell.print("Methods: ");
samer@0 41 for (int i=0;i<mths.length; i++) {
samer@0 42 Shell.print("\t"+mths[i]);
samer@0 43 }
samer@0 44
samer@0 45 } else if (cmd.equals("fields")) {
samer@0 46 Field flds[];
samer@0 47
samer@0 48 if (all.value) flds = cl.getFields();
samer@0 49 else flds = cl.getDeclaredFields();
samer@0 50
samer@0 51 Shell.print("Fields: ");
samer@0 52 for (int i=0;i<flds.length; i++) {
samer@0 53 Shell.print("\t"+flds[i]);
samer@0 54 }
samer@0 55 } else if (cmd.equals("interfaces")) {
samer@0 56 Class ifaces[] = cl.getInterfaces();
samer@0 57 Shell.print("Interfaces: ");
samer@0 58 for (int i=0;i<ifaces.length; i++) {
samer@0 59 Shell.print("\t"+ifaces[i]);
samer@0 60 }
samer@0 61 } else if (cmd.equals("superclass")) {
samer@0 62 setClass(cl.getSuperclass());
samer@0 63 } else if (cmd.equals("verbose")) {
samer@0 64 all.value = X._bool(env.datum(),!all.value);
samer@0 65 all.changed();
samer@0 66 }
samer@0 67 }
samer@0 68
samer@0 69 public void update(Observable o, Object src)
samer@0 70 {
samer@0 71 if (clname.equals(o) && src!=this) { // &&&
samer@0 72 try { setClass(clname.value); }
samer@0 73 catch (Exception ex) {}
samer@0 74 }
samer@0 75 }
samer@0 76
samer@0 77 private void setClass(String n) throws Exception {
samer@0 78 setClass(Class.forName(n));
samer@0 79 }
samer@0 80
samer@0 81 private void setClass(Class c) throws Exception
samer@0 82 {
samer@0 83 clname.value = c.getName();
samer@0 84 clname.changed(this);
samer@0 85 cl = c;
samer@0 86
samer@0 87 Constructor cons[] = cl.getConstructors();
samer@0 88
samer@0 89 Shell.print("\nClass: "+cl);
samer@0 90 Shell.print("\textends "+cl.getSuperclass());
samer@0 91 Shell.print("constructors");
samer@0 92 for (int i=0;i<cons.length; i++) {
samer@0 93 Shell.print("\t"+cons[i]);
samer@0 94 }
samer@0 95 }
samer@0 96 }
samer@0 97