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