KickJava   Java API By Example, From Geeks To Geeks.

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


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.attribute.*;
25 import proguard.classfile.attribute.annotation.*;
26 import proguard.classfile.attribute.annotation.visitor.*;
27 import proguard.classfile.attribute.visitor.*;
28 import proguard.classfile.constant.*;
29 import proguard.classfile.constant.visitor.ConstantVisitor;
30 import proguard.classfile.util.SimplifiedVisitor;
31
32 /**
33  * This ClassVisitor, MemberVisitor, ConstantVisitor, AttributeVisitor, etc.
34  * lets a given ClassVisitor visit all the referenced classes of the elements
35  * that it visits.
36  *
37  * @author Eric Lafortune
38  */

39 public class ReferencedClassVisitor
40 extends SimplifiedVisitor
41 implements ClassVisitor,
42              MemberVisitor,
43              ConstantVisitor,
44              AttributeVisitor,
45              LocalVariableInfoVisitor,
46              LocalVariableTypeInfoVisitor,
47              AnnotationVisitor,
48              ElementValueVisitor
49 {
50     private ClassVisitor classVisitor;
51
52
53     public ReferencedClassVisitor(ClassVisitor classVisitor)
54     {
55         this.classVisitor = classVisitor;
56     }
57
58
59     // Implementations for ClassVisitor.
60

61     public void visitProgramClass(ProgramClass programClass)
62     {
63         // Visit the constant pool entries.
64
programClass.constantPoolEntriesAccept(this);
65
66         // Visit the fields and methods.
67
programClass.fieldsAccept(this);
68         programClass.methodsAccept(this);
69
70         // Visit the attributes.
71
programClass.attributesAccept(this);
72     }
73
74
75     public void visitLibraryClass(LibraryClass libraryClass)
76     {
77         // Visit the fields and methods.
78
libraryClass.fieldsAccept(this);
79         libraryClass.methodsAccept(this);
80     }
81
82
83     // Implementations for MemberVisitor.
84

85     public void visitProgramMember(ProgramClass programClass, ProgramMember programMember)
86     {
87         // Let the visitor visit the classes referenced in the descriptor string.
88
programMember.referencedClassesAccept(classVisitor);
89
90         // Visit the attributes.
91
programMember.attributesAccept(programClass, this);
92     }
93
94
95     public void visitLibraryMember(LibraryClass programClass, LibraryMember libraryMember)
96     {
97         // Let the visitor visit the classes referenced in the descriptor string.
98
libraryMember.referencedClassesAccept(classVisitor);
99     }
100
101
102     // Implementations for ConstantVisitor.
103

104     public void visitAnyConstant(Clazz clazz, Constant constant) {}
105
106
107     public void visitStringConstant(Clazz clazz, StringConstant stringConstant)
108     {
109         // Let the visitor visit the class referenced in the string constant.
110
stringConstant.referencedClassAccept(classVisitor);
111     }
112
113
114     public void visitAnyRefConstant(Clazz clazz, RefConstant refConstant)
115     {
116         // Let the visitor visit the class referenced in the reference constant.
117
refConstant.referencedClassAccept(classVisitor);
118     }
119
120
121     public void visitClassConstant(Clazz clazz, ClassConstant classConstant)
122     {
123         // Let the visitor visit the class referenced in the class constant.
124
classConstant.referencedClassAccept(classVisitor);
125     }
126
127
128     // Implementations for AttributeVisitor.
129

130     public void visitAnyAttribute(Clazz clazz, Attribute attribute) {}
131
132
133     public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute)
134     {
135         // Let the visitor visit the class of the enclosing method.
136
enclosingMethodAttribute.referencedClassAccept(classVisitor);
137     }
138
139
140     public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
141     {
142         // Visit the attributes of the code attribute.
143
codeAttribute.attributesAccept(clazz, method, this);
144     }
145
146
147     public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute)
148     {
149         // Visit the local variables.
150
localVariableTableAttribute.localVariablesAccept(clazz, method, codeAttribute, this);
151     }
152
153
154     public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute)
155     {
156         // Visit the local variable types.
157
localVariableTypeTableAttribute.localVariablesAccept(clazz, method, codeAttribute, this);
158     }
159
160
161     public void visitSignatureAttribute(Clazz clazz, SignatureAttribute signatureAttribute)
162     {
163         // Let the visitor visit the classes referenced in the signature string.
164
signatureAttribute.referencedClassesAccept(classVisitor);
165     }
166
167
168     public void visitAnyAnnotationsAttribute(Clazz clazz, AnnotationsAttribute annotationsAttribute)
169     {
170         // Visit the annotations.
171
annotationsAttribute.annotationsAccept(clazz, this);
172     }
173
174
175     public void visitAnyParameterAnnotationsAttribute(Clazz clazz, Method method, ParameterAnnotationsAttribute parameterAnnotationsAttribute)
176     {
177         // Visit the parameter annotations.
178
parameterAnnotationsAttribute.annotationsAccept(clazz, method, this);
179     }
180
181
182     public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute)
183     {
184         // Visit the default element value.
185
annotationDefaultAttribute.defaultValueAccept(clazz, this);
186     }
187
188
189     // Implementations for LocalVariableInfoVisitor.
190

191     public void visitLocalVariableInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableInfo localVariableInfo)
192     {
193         // Let the visitor visit the class referenced in the local variable.
194
localVariableInfo.referencedClassAccept(classVisitor);
195     }
196
197
198     // Implementations for LocalVariableTypeInfoVisitor.
199

200     public void visitLocalVariableTypeInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeInfo localVariableTypeInfo)
201     {
202         // Let the visitor visit the classes referenced in the local variable type.
203
localVariableTypeInfo.referencedClassesAccept(classVisitor);
204     }
205
206
207     // Implementations for AnnotationVisitor.
208

209     public void visitAnnotation(Clazz clazz, Annotation annotation)
210     {
211         // Let the visitor visit the classes referenced in the annotation.
212
annotation.referencedClassesAccept(classVisitor);
213
214         // Visit the element values.
215
annotation.elementValuesAccept(clazz, this);
216     }
217
218
219     // Implementations for ElementValueVisitor.
220

221     public void visitAnyElementValue(Clazz clazz, Annotation annotation, ElementValue elementValue) {}
222
223
224     public void visitEnumConstantElementValue(Clazz clazz, Annotation annotation, EnumConstantElementValue enumConstantElementValue)
225     {
226         // Let the visitor visit the classes referenced in the constant element value.
227
enumConstantElementValue.referencedClassesAccept(classVisitor);
228     }
229
230
231     public void visitClassElementValue(Clazz clazz, Annotation annotation, ClassElementValue classElementValue)
232     {
233         // Let the visitor visit the classes referenced in the class element value.
234
classElementValue.referencedClassesAccept(classVisitor);
235     }
236
237
238     public void visitArrayElementValue(Clazz clazz, Annotation annotation, ArrayElementValue arrayElementValue)
239     {
240         // Visit the element values.
241
arrayElementValue.elementValuesAccept(clazz, annotation, this);
242     }
243 }
244
Popular Tags