2 import gnu
.java
.lang
.*;
3 import java
.lang
.reflect
.*;
5 public class OutputClass
{
6 public static void main(String
[] args
) {
7 for(int i
=1;i
<args
.length
;i
++) {
8 if(args
[i
].endsWith(".class")) {
9 args
[i
] = args
[i
].substring(0,args
[i
].length()-6);
11 args
[i
] = args
[i
].replace('/','.');
14 OutputClass
.outputClass(Class
.forName(args
[i
]),System
.out
);
15 } catch(ClassNotFoundException E
) {
16 new PrintStream(new FileOutputStream(args
[i
]+".out-"+args
[0])).println(args
[i
] + ": class missing.");
18 } catch(IOException e
) {
23 static void outputClass(Class c
, PrintStream out
) {
24 out
.println(c
.getName() + ":class:" + Modifier
.toString(sanitizeModifier(c
.getModifiers())));
25 // Put implemented interfaces here
26 Field
[] f
= ClassHelper
.getAllFields(c
);
27 for(int i
=0;i
<f
.length
;i
++) {
28 if(Modifier
.isPublic(f
[i
].getModifiers()) || Modifier
.isProtected(f
[i
].getModifiers())) {
32 + Modifier
.toString(sanitizeModifier(f
[i
].getModifiers()))
34 + f
[i
].getType().getName()
36 + ClassHelper
.getTruncatedName(f
[i
].getName()));
40 Method
[] m
= ClassHelper
.getAllMethods(c
);
41 for(int i
=0;i
<m
.length
;i
++) {
42 if(Modifier
.isPublic(m
[i
].getModifiers()) || Modifier
.isProtected(m
[i
].getModifiers())) {
46 + Modifier
.toString(sanitizeModifier(m
[i
].getModifiers()))
48 + m
[i
].getReturnType().getName()
50 + ClassHelper
.getTruncatedName(m
[i
].getName())
52 + printArgs(m
[i
].getParameterTypes())
54 + printExceptions(m
[i
].getExceptionTypes()));
58 Constructor
[] cl
= c
.getDeclaredConstructors();
59 for(int i
=0;i
<cl
.length
;i
++) {
60 if(Modifier
.isPublic(cl
[i
].getModifiers()) || Modifier
.isProtected(cl
[i
].getModifiers())) {
64 + Modifier
.toString(sanitizeModifier(cl
[i
].getModifiers()))
66 + ClassHelper
.getTruncatedName(cl
[i
].getName())
68 + printArgs(cl
[i
].getParameterTypes())
70 + printExceptions(m
[i
].getExceptionTypes()));
75 static String
printArgs(Class
[] args
) {
76 StringBuffer sb
= new StringBuffer();
77 for(int i
=0;i
<args
.length
;i
++) {
79 if(i
!=args
.length
-1) {
86 static String
printExceptions(Class
[] exceptions
) {
87 StringBuffer sb
= new StringBuffer();
88 for(int i
=0;i
<exceptions
.length
;i
++) {
90 sb
.append(exceptions
[i
].getName());
95 static int sanitizeModifier(int modifier
) {
96 return modifier
& ~
(Modifier
.SYNCHRONIZED
| Modifier
.TRANSIENT
| Modifier
.VOLATILE
| Modifier
.NATIVE
);