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