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