1 package org.apache.maven.shared.dependency.analyzer.asm;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.objectweb.asm.AnnotationVisitor;
23 import org.objectweb.asm.ClassVisitor;
24 import org.objectweb.asm.FieldVisitor;
25 import org.objectweb.asm.MethodVisitor;
26 import org.objectweb.asm.Opcodes;
27 import org.objectweb.asm.Type;
28 import org.objectweb.asm.signature.SignatureReader;
29 import org.objectweb.asm.signature.SignatureVisitor;
30
31
32
33
34
35
36
37
38
39 public class DefaultClassVisitor
40 extends ClassVisitor
41 {
42
43
44 private final ResultCollector resultCollector;
45
46 private final SignatureVisitor signatureVisitor;
47
48 private final AnnotationVisitor annotationVisitor;
49
50 private final FieldVisitor fieldVisitor;
51
52 private final MethodVisitor methodVisitor;
53
54
55
56 public DefaultClassVisitor( SignatureVisitor signatureVisitor, AnnotationVisitor annotationVisitor,
57 FieldVisitor fieldVisitor, MethodVisitor methodVisitor,
58 ResultCollector resultCollector )
59 {
60 super( Opcodes.ASM6 );
61 this.signatureVisitor = signatureVisitor;
62 this.annotationVisitor = annotationVisitor;
63 this.fieldVisitor = fieldVisitor;
64 this.methodVisitor = methodVisitor;
65 this.resultCollector = resultCollector;
66 }
67
68 public void visit( final int version, final int access, final String name, final String signature,
69 final String superName, final String[] interfaces )
70 {
71 if ( signature == null )
72 {
73 resultCollector.addName( superName );
74 resultCollector.addNames( interfaces );
75 }
76 else
77 {
78 addSignature( signature );
79 }
80 }
81
82 public AnnotationVisitor visitAnnotation( final String desc, final boolean visible )
83 {
84 resultCollector.addDesc( desc );
85
86 return annotationVisitor;
87 }
88
89 public FieldVisitor visitField( final int access, final String name, final String desc, final String signature,
90 final Object value )
91 {
92 if ( signature == null )
93 {
94 resultCollector.addDesc( desc );
95 }
96 else
97 {
98 addTypeSignature( signature );
99 }
100
101 if ( value instanceof Type )
102 {
103 resultCollector.addType( (Type) value );
104 }
105
106 return fieldVisitor;
107 }
108
109 public MethodVisitor visitMethod( final int access, final String name, final String desc, final String signature,
110 final String[] exceptions )
111 {
112 if ( signature == null )
113 {
114 resultCollector.addMethodDesc( desc );
115 }
116 else
117 {
118 addSignature( signature );
119 }
120
121 resultCollector.addNames( exceptions );
122
123 return methodVisitor;
124 }
125
126
127
128 private void addSignature( final String signature )
129 {
130 if ( signature != null )
131 {
132 new SignatureReader( signature ).accept( signatureVisitor );
133 }
134 }
135
136 private void addTypeSignature( final String signature )
137 {
138 if ( signature != null )
139 {
140 new SignatureReader( signature ).acceptType( signatureVisitor );
141 }
142 }
143
144
145 }