KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > proguard > classfile > visitor > SimpleClassPrinter


1 /*
2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
3  * of Java bytecode.
4  *
5  * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the Free
9  * Software Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  */

21 package proguard.classfile.visitor;
22
23 import proguard.classfile.*;
24 import proguard.classfile.util.*;
25
26 import java.io.*;
27
28
29 /**
30  * This <code>ClassVisitor</code> and <code>MemberVisitor</code>
31  * prints out the class names of the classes it visits, and the full class
32  * member descriptions of the class members it visits. The names are printed
33  * in a readable, Java-like format. The access modifiers can be included or not.
34  *
35  * @author Eric Lafortune
36  */

37 public class SimpleClassPrinter
38 implements ClassVisitor,
39              MemberVisitor
40 {
41     private boolean printAccessModifiers;
42     private PrintStream ps;
43
44
45     /**
46      * Creates a new SimpleClassPrinter that prints to
47      * <code>System.out</code>, including the access modifiers.
48      */

49     public SimpleClassPrinter()
50     {
51         this(true);
52     }
53
54     /**
55      * Creates a new SimpleClassPrinter that prints to
56      * <code>System.out</code>, with or without the access modifiers.
57      */

58     public SimpleClassPrinter(boolean printAccessModifiers)
59     {
60         this(printAccessModifiers, System.out);
61     }
62
63     /**
64      * Creates a new SimpleClassPrinter that prints to the given
65      * <code>PrintStream</code>, with or without the access modifiers.
66      */

67     public SimpleClassPrinter(boolean printAccessModifiers,
68                               PrintStream printStream)
69     {
70         this.printAccessModifiers = printAccessModifiers;
71         this.ps = printStream;
72     }
73
74
75     // Implementations for ClassVisitor.
76

77     public void visitProgramClass(ProgramClass programClass)
78     {
79         ps.println(ClassUtil.externalFullClassDescription(
80                        printAccessModifiers ?
81                            programClass.getAccessFlags() :
82                            0,
83                        programClass.getName()));
84     }
85
86
87     public void visitLibraryClass(LibraryClass libraryClass)
88     {
89         ps.println(ClassUtil.externalFullClassDescription(
90                        printAccessModifiers ?
91                            libraryClass.getAccessFlags() :
92                            0,
93                        libraryClass.getName()));
94     }
95
96
97     // Implementations for MemberVisitor.
98

99     public void visitProgramField(ProgramClass programClass, ProgramField programField)
100     {
101         ps.println(ClassUtil.externalFullClassDescription(
102                        printAccessModifiers ?
103                            programClass.getAccessFlags() :
104                            0,
105                        programClass.getName()) +
106                    ": " +
107                    ClassUtil.externalFullFieldDescription(
108                        printAccessModifiers ?
109                            programField.getAccessFlags() :
110                            0,
111                        programField.getName(programClass),
112                        programField.getDescriptor(programClass)));
113     }
114
115
116     public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
117     {
118         ps.println(ClassUtil.externalFullClassDescription(
119                        printAccessModifiers ?
120                            programClass.getAccessFlags() :
121                            0,
122                        programClass.getName()) +
123                    ": " +
124                    ClassUtil.externalFullMethodDescription(
125                        programClass.getName(),
126                        printAccessModifiers ?
127                            programMethod.getAccessFlags() :
128                            0,
129                        programMethod.getName(programClass),
130                        programMethod.getDescriptor(programClass)));
131     }
132
133
134     public void visitLibraryField(LibraryClass libraryClass, LibraryField libraryField)
135     {
136         ps.println(ClassUtil.externalFullClassDescription(
137                        printAccessModifiers ?
138                            libraryClass.getAccessFlags() :
139                            0,
140                        libraryClass.getName()) +
141                    ": " +
142                    ClassUtil.externalFullFieldDescription(
143                        printAccessModifiers ?
144                            libraryField.getAccessFlags() :
145                            0,
146                        libraryField.getName(libraryClass),
147                        libraryField.getDescriptor(libraryClass)));
148     }
149
150
151     public void visitLibraryMethod(LibraryClass libraryClass, LibraryMethod libraryMethod)
152     {
153         ps.println(ClassUtil.externalFullClassDescription(
154                        printAccessModifiers ?
155                            libraryClass.getAccessFlags() :
156                            0,
157                        libraryClass.getName()) +
158                    ": " +
159                    ClassUtil.externalFullMethodDescription(
160                        libraryClass.getName(),
161                        printAccessModifiers ?
162                            libraryMethod.getAccessFlags() :
163                            0,
164                        libraryMethod.getName(libraryClass),
165                        libraryMethod.getDescriptor(libraryClass)));
166     }
167 }
168
Popular Tags