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 public void visit(
81 final int version,
82 final int access,
83 final String name,
84 final String signature,
85 final String superName,
86 final String[] interfaces) {
87 if (signature == null) {
88 resultCollector.addName(superName);
89 resultCollector.addNames(interfaces);
90 } else {
91 addSignature(signature);
92 }
93 }
94
95
96 public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
97 resultCollector.addDesc(desc);
98
99 return annotationVisitor;
100 }
101
102
103 public FieldVisitor visitField(
104 final int access, final String name, final String desc, final String signature, final Object value) {
105 if (signature == null) {
106 resultCollector.addDesc(desc);
107 } else {
108 addTypeSignature(signature);
109 }
110
111 if (value instanceof Type) {
112 resultCollector.addType((Type) value);
113 }
114
115 return fieldVisitor;
116 }
117
118
119
120
121
122
123
124
125
126
127
128 public MethodVisitor visitMethod(
129 final int access, final String name, final String desc, final String signature, final String[] exceptions) {
130 if (signature == null) {
131 resultCollector.addMethodDesc(desc);
132 } else {
133 addSignature(signature);
134 }
135
136 resultCollector.addNames(exceptions);
137
138 return methodVisitor;
139 }
140
141
142 public void visitNestHost(final String nestHost) {
143 resultCollector.addName(nestHost);
144 }
145
146
147 public void visitNestMember(final String nestMember) {
148 resultCollector.addName(nestMember);
149 }
150
151 private void addSignature(final String signature) {
152 if (signature != null) {
153 new SignatureReader(signature).accept(signatureVisitor);
154 }
155 }
156
157 private void addTypeSignature(final String signature) {
158 if (signature != null) {
159 new SignatureReader(signature).acceptType(signatureVisitor);
160 }
161 }
162 }