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
|