View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   https://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package org.apache.bcel.visitors;
21  
22  import org.apache.bcel.classfile.AnnotationDefault;
23  import org.apache.bcel.classfile.AnnotationEntry;
24  import org.apache.bcel.classfile.Annotations;
25  import org.apache.bcel.classfile.BootstrapMethods;
26  import org.apache.bcel.classfile.Code;
27  import org.apache.bcel.classfile.CodeException;
28  import org.apache.bcel.classfile.ConstantClass;
29  import org.apache.bcel.classfile.ConstantDouble;
30  import org.apache.bcel.classfile.ConstantDynamic;
31  import org.apache.bcel.classfile.ConstantFieldref;
32  import org.apache.bcel.classfile.ConstantFloat;
33  import org.apache.bcel.classfile.ConstantInteger;
34  import org.apache.bcel.classfile.ConstantInterfaceMethodref;
35  import org.apache.bcel.classfile.ConstantInvokeDynamic;
36  import org.apache.bcel.classfile.ConstantLong;
37  import org.apache.bcel.classfile.ConstantMethodHandle;
38  import org.apache.bcel.classfile.ConstantMethodType;
39  import org.apache.bcel.classfile.ConstantMethodref;
40  import org.apache.bcel.classfile.ConstantModule;
41  import org.apache.bcel.classfile.ConstantNameAndType;
42  import org.apache.bcel.classfile.ConstantPackage;
43  import org.apache.bcel.classfile.ConstantPool;
44  import org.apache.bcel.classfile.ConstantString;
45  import org.apache.bcel.classfile.ConstantUtf8;
46  import org.apache.bcel.classfile.ConstantValue;
47  import org.apache.bcel.classfile.Deprecated;
48  import org.apache.bcel.classfile.EnclosingMethod;
49  import org.apache.bcel.classfile.ExceptionTable;
50  import org.apache.bcel.classfile.Field;
51  import org.apache.bcel.classfile.InnerClass;
52  import org.apache.bcel.classfile.InnerClasses;
53  import org.apache.bcel.classfile.JavaClass;
54  import org.apache.bcel.classfile.LineNumber;
55  import org.apache.bcel.classfile.LineNumberTable;
56  import org.apache.bcel.classfile.LocalVariable;
57  import org.apache.bcel.classfile.LocalVariableTable;
58  import org.apache.bcel.classfile.LocalVariableTypeTable;
59  import org.apache.bcel.classfile.Method;
60  import org.apache.bcel.classfile.MethodParameter;
61  import org.apache.bcel.classfile.MethodParameters;
62  import org.apache.bcel.classfile.Module;
63  import org.apache.bcel.classfile.ModuleExports;
64  import org.apache.bcel.classfile.ModuleMainClass;
65  import org.apache.bcel.classfile.ModuleOpens;
66  import org.apache.bcel.classfile.ModulePackages;
67  import org.apache.bcel.classfile.ModuleProvides;
68  import org.apache.bcel.classfile.ModuleRequires;
69  import org.apache.bcel.classfile.NestHost;
70  import org.apache.bcel.classfile.NestMembers;
71  import org.apache.bcel.classfile.ParameterAnnotationEntry;
72  import org.apache.bcel.classfile.ParameterAnnotations;
73  import org.apache.bcel.classfile.Record;
74  import org.apache.bcel.classfile.RecordComponentInfo;
75  import org.apache.bcel.classfile.Signature;
76  import org.apache.bcel.classfile.SourceFile;
77  import org.apache.bcel.classfile.StackMap;
78  import org.apache.bcel.classfile.StackMapEntry;
79  import org.apache.bcel.classfile.StackMapType;
80  import org.apache.bcel.classfile.Synthetic;
81  import org.apache.bcel.classfile.Unknown;
82  import org.apache.bcel.classfile.Visitor;
83  
84  public class CountingVisitor implements Visitor {
85      // CHECKSTYLE:OFF (public mutable fields in test code)
86      public int unknownCount;
87  
88      public int syntheticCount;
89  
90      public int stackMapEntryCount;
91  
92      public int stackMapTypeCount;
93  
94      public int stackMapCount;
95  
96      public int sourceFileCount;
97  
98      public int signatureAnnotationCount;
99  
100     public int parameterAnnotationCount;
101 
102     public int methodCount;
103 
104     public int localVariableTypeTableCount;
105 
106     public int localVariableTableCount;
107 
108     public int localVariableCount;
109 
110     public int lineNumberTableCount;
111 
112     public int lineNumberCount;
113 
114     public int javaClassCount;
115 
116     public int innerClassesCount;
117 
118     public int innerClassCount;
119 
120     public int fieldCount;
121 
122     public int exceptionTableCount;
123 
124     public int enclosingMethodCount;
125 
126     public int deprecatedCount;
127 
128     public int constantValueCount;
129 
130     public int constantUtf8Count;
131 
132     public int constantStringCount;
133 
134     public int constantNameAndTypeCount;
135 
136     public int constantPoolCount;
137 
138     public int constantMethodrefCount;
139 
140     public int constantLongCount;
141 
142     public int constantIntegerCount;
143 
144     public int constantInterfaceMethodrefCount;
145 
146     public int constantFloatCount;
147 
148     public int constantFieldrefCount;
149 
150     public int constantClassCount;
151 
152     public int constantDoubleCount;
153 
154     public int codeExceptionCount;
155 
156     public int codeCount;
157 
158     public int annotationEntryCount;
159 
160     public int annotationDefaultCount;
161 
162     public int annotationCount;
163 
164     /** @since 6.0 */
165     public int bootstrapMethodsCount;
166 
167     /** @since 6.0 */
168     public int methodParameterCount;
169 
170     /** @since 6.0 */
171     public int methodParametersCount;
172 
173     /** @since 6.0 */
174     public int constantInvokeDynamic;
175 
176     /** @since 6.1 */
177     public int constantModuleCount;
178 
179     /** @since 6.1 */
180     public int constantPackageCount;
181 
182     /** @since 6.3 */
183     public int constantDynamicCount;
184 
185     /** @since 6.4.0 */
186     public int moduleCount;
187 
188     /** @since 6.4.0 */
189     public int moduleExportsCount;
190 
191     /** @since 6.4.0 */
192     public int moduleOpensCount;
193 
194     /** @since 6.4.0 */
195     public int moduleProvidesCount;
196 
197     /** @since 6.4.0 */
198     public int moduleRequiresCount;
199 
200     /** @since 6.4.0 */
201     public int moduleMainClassCount;
202 
203     /** @since 6.4.0 */
204     public int modulePackagesCount;
205 
206     /** @since 6.4.0 */
207     public int nestHostCount;
208 
209     /** @since 6.4.0 */
210     public int nestMembersCount;
211 
212     /** @since 6.9.0 */
213     public int recordCount;
214 
215     /** @since 6.9.0 */
216     public int recordComponentCount;
217 
218     // CHECKSTYLE:ON
219 
220     @Override
221     public void visitAnnotation(final Annotations obj) {
222         annotationCount++;
223     }
224 
225     @Override
226     public void visitAnnotationDefault(final AnnotationDefault obj) {
227         annotationDefaultCount++;
228     }
229 
230     @Override
231     public void visitAnnotationEntry(final AnnotationEntry obj) {
232         annotationEntryCount++;
233     }
234 
235     /** @since 6.0 */
236     @Override
237     public void visitBootstrapMethods(final BootstrapMethods obj) {
238         bootstrapMethodsCount++;
239     }
240 
241     @Override
242     public void visitCode(final Code obj) {
243         codeCount++;
244     }
245 
246     @Override
247     public void visitCodeException(final CodeException obj) {
248         codeExceptionCount++;
249     }
250 
251     @Override
252     public void visitConstantClass(final ConstantClass obj) {
253         constantClassCount++;
254     }
255 
256     @Override
257     public void visitConstantDouble(final ConstantDouble obj) {
258         constantDoubleCount++;
259     }
260 
261     /** @since 6.3 */
262     @Override
263     public void visitConstantDynamic(final ConstantDynamic constantDynamic) {
264         constantDynamicCount++;
265     }
266 
267     @Override
268     public void visitConstantFieldref(final ConstantFieldref obj) {
269         constantFieldrefCount++;
270     }
271 
272     @Override
273     public void visitConstantFloat(final ConstantFloat obj) {
274         constantFloatCount++;
275     }
276 
277     @Override
278     public void visitConstantInteger(final ConstantInteger obj) {
279         constantIntegerCount++;
280     }
281 
282     @Override
283     public void visitConstantInterfaceMethodref(final ConstantInterfaceMethodref obj) {
284         constantInterfaceMethodrefCount++;
285     }
286 
287     /** @since 6.0 */
288     @Override
289     public void visitConstantInvokeDynamic(final ConstantInvokeDynamic obj) {
290         constantInvokeDynamic++;
291     }
292 
293     @Override
294     public void visitConstantLong(final ConstantLong obj) {
295         constantLongCount++;
296     }
297 
298     /** @since 6.0 */
299     @Override
300     public void visitConstantMethodHandle(final ConstantMethodHandle constantMethodHandle) {
301         // TODO Auto-generated method stub
302     }
303 
304     @Override
305     public void visitConstantMethodref(final ConstantMethodref obj) {
306         constantMethodrefCount++;
307     }
308 
309     /** @since 6.0 */
310     @Override
311     public void visitConstantMethodType(final ConstantMethodType obj) {
312         // TODO Auto-generated method stub
313     }
314 
315     /** @since 6.1 */
316     @Override
317     public void visitConstantModule(final ConstantModule constantModule) {
318         constantModuleCount++;
319     }
320 
321     @Override
322     public void visitConstantNameAndType(final ConstantNameAndType obj) {
323         constantNameAndTypeCount++;
324     }
325 
326     /** @since 6.1 */
327     @Override
328     public void visitConstantPackage(final ConstantPackage constantPackage) {
329         constantPackageCount++;
330     }
331 
332     @Override
333     public void visitConstantPool(final ConstantPool obj) {
334         constantPoolCount++;
335     }
336 
337     @Override
338     public void visitConstantString(final ConstantString obj) {
339         constantStringCount++;
340     }
341 
342     @Override
343     public void visitConstantUtf8(final ConstantUtf8 obj) {
344         constantUtf8Count++;
345     }
346 
347     @Override
348     public void visitConstantValue(final ConstantValue obj) {
349         constantValueCount++;
350     }
351 
352     @Override
353     public void visitDeprecated(final Deprecated obj) {
354         deprecatedCount++;
355     }
356 
357     @Override
358     public void visitEnclosingMethod(final EnclosingMethod obj) {
359         enclosingMethodCount++;
360     }
361 
362     @Override
363     public void visitExceptionTable(final ExceptionTable obj) {
364         exceptionTableCount++;
365     }
366 
367     @Override
368     public void visitField(final Field obj) {
369         fieldCount++;
370     }
371 
372     @Override
373     public void visitInnerClass(final InnerClass obj) {
374         innerClassCount++;
375     }
376 
377     @Override
378     public void visitInnerClasses(final InnerClasses obj) {
379         innerClassesCount++;
380     }
381 
382     @Override
383     public void visitJavaClass(final JavaClass obj) {
384         javaClassCount++;
385     }
386 
387     @Override
388     public void visitLineNumber(final LineNumber obj) {
389         lineNumberCount++;
390     }
391 
392     @Override
393     public void visitLineNumberTable(final LineNumberTable obj) {
394         lineNumberTableCount++;
395     }
396 
397     @Override
398     public void visitLocalVariable(final LocalVariable obj) {
399         localVariableCount++;
400     }
401 
402     @Override
403     public void visitLocalVariableTable(final LocalVariableTable obj) {
404         localVariableTableCount++;
405     }
406 
407     @Override
408     public void visitLocalVariableTypeTable(final LocalVariableTypeTable obj) {
409         localVariableTypeTableCount++;
410     }
411 
412     @Override
413     public void visitMethod(final Method obj) {
414         methodCount++;
415     }
416 
417     /** @since 6.0 */
418     @Override
419     public void visitMethodParameter(final MethodParameter obj) {
420         methodParameterCount++;
421     }
422 
423     /** @since 6.0 */
424     @Override
425     public void visitMethodParameters(final MethodParameters obj) {
426         methodParametersCount++;
427     }
428 
429     /** @since 6.4.0 */
430     @Override
431     public void visitModule(final Module obj) {
432         moduleCount++;
433     }
434 
435     /** @since 6.4.0 */
436     @Override
437     public void visitModuleExports(final ModuleExports obj) {
438         moduleExportsCount++;
439     }
440 
441     /** @since 6.4.0 */
442     @Override
443     public void visitModuleMainClass(final ModuleMainClass obj) {
444         moduleMainClassCount++;
445     }
446 
447     /** @since 6.4.0 */
448     @Override
449     public void visitModuleOpens(final ModuleOpens obj) {
450         moduleOpensCount++;
451     }
452 
453     /** @since 6.4.0 */
454     @Override
455     public void visitModulePackages(final ModulePackages obj) {
456         modulePackagesCount++;
457     }
458 
459     /** @since 6.4.0 */
460     @Override
461     public void visitModuleProvides(final ModuleProvides obj) {
462         moduleProvidesCount++;
463     }
464 
465     /** @since 6.4.0 */
466     @Override
467     public void visitModuleRequires(final ModuleRequires obj) {
468         moduleRequiresCount++;
469     }
470 
471     /** @since 6.4.0 */
472     @Override
473     public void visitNestHost(final NestHost obj) {
474         nestHostCount++;
475     }
476 
477     /** @since 6.4.0 */
478     @Override
479     public void visitNestMembers(final NestMembers obj) {
480         nestMembersCount++;
481     }
482 
483     @Override
484     public void visitParameterAnnotation(final ParameterAnnotations obj) {
485         parameterAnnotationCount++;
486     }
487 
488     /** @since 6.0 */
489     @Override
490     public void visitParameterAnnotationEntry(final ParameterAnnotationEntry parameterAnnotationEntry) {
491         // TODO Auto-generated method stub
492     }
493 
494     @Override
495     public void visitRecord(final Record v) {
496         recordCount++;
497     }
498 
499     @Override
500     public void visitRecordComponent(final RecordComponentInfo v) {
501         recordComponentCount++;
502     }
503 
504     @Override
505     public void visitSignature(final Signature obj) {
506         signatureAnnotationCount++;
507     }
508 
509     @Override
510     public void visitSourceFile(final SourceFile obj) {
511         sourceFileCount++;
512     }
513 
514     @Override
515     public void visitStackMap(final StackMap obj) {
516         stackMapCount++;
517     }
518 
519     @Override
520     public void visitStackMapEntry(final StackMapEntry obj) {
521         stackMapEntryCount++;
522     }
523 
524     /**
525      * @since 6.8.0
526      */
527     @Override
528     public void visitStackMapType(final StackMapType obj) {
529         stackMapTypeCount++;
530     }
531 
532     @Override
533     public void visitSynthetic(final Synthetic obj) {
534         syntheticCount++;
535     }
536 
537     @Override
538     public void visitUnknown(final Unknown obj) {
539         unknownCount++;
540     }
541 }