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.Label;
23 import org.objectweb.asm.MethodVisitor;
24 import org.objectweb.asm.Opcodes;
25 import org.objectweb.asm.Type;
26 import org.objectweb.asm.TypePath;
27 import org.objectweb.asm.signature.SignatureReader;
28 import org.objectweb.asm.signature.SignatureVisitor;
29
30
31
32
33
34
35
36 public class DefaultMethodVisitor extends MethodVisitor {
37 private final AnnotationVisitor annotationVisitor;
38
39 private final SignatureVisitor signatureVisitor;
40
41 private final ResultCollector resultCollector;
42
43
44
45
46
47
48
49
50 public DefaultMethodVisitor(
51 AnnotationVisitor annotationVisitor, SignatureVisitor signatureVisitor, ResultCollector resultCollector) {
52 super(Opcodes.ASM9);
53 this.annotationVisitor = annotationVisitor;
54 this.signatureVisitor = signatureVisitor;
55 this.resultCollector = resultCollector;
56 }
57
58
59 public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
60 resultCollector.addDesc(desc);
61
62 return annotationVisitor;
63 }
64
65
66 @Override
67 public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible) {
68 resultCollector.addDesc(desc);
69
70 return annotationVisitor;
71 }
72
73
74 public AnnotationVisitor visitParameterAnnotation(final int parameter, final String desc, final boolean visible) {
75 resultCollector.addDesc(desc);
76
77 return annotationVisitor;
78 }
79
80
81 @Override
82 public AnnotationVisitor visitLocalVariableAnnotation(
83 int typeRef, TypePath typePath, Label[] start, Label[] end, int[] index, String desc, boolean visible) {
84 resultCollector.addDesc(desc);
85
86 return annotationVisitor;
87 }
88
89
90 public void visitTypeInsn(final int opcode, final String desc) {
91 if (desc.charAt(0) == '[') {
92 resultCollector.addDesc(desc);
93 } else {
94 resultCollector.addName(desc);
95 }
96 }
97
98
99 public void visitFieldInsn(final int opcode, final String owner, final String name, final String desc) {
100 resultCollector.addName(owner);
101
102
103
104
105
106
107 }
108
109
110 @Override
111 public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
112 resultCollector.addName(owner);
113 }
114
115
116 public void visitLdcInsn(final Object cst) {
117 if (cst instanceof Type) {
118 resultCollector.addType((Type) cst);
119 }
120 }
121
122
123 public void visitMultiANewArrayInsn(final String desc, final int dims) {
124 resultCollector.addDesc(desc);
125 }
126
127
128 public void visitTryCatchBlock(final Label start, final Label end, final Label handler, final String type) {
129 resultCollector.addName(type);
130 }
131
132
133 public void visitLocalVariable(
134 final String name,
135 final String desc,
136 final String signature,
137 final Label start,
138 final Label end,
139 final int index) {
140 if (signature == null) {
141 resultCollector.addDesc(desc);
142 } else {
143 addTypeSignature(signature);
144 }
145 }
146
147 private void addTypeSignature(final String signature) {
148 if (signature != null) {
149 new SignatureReader(signature).acceptType(signatureVisitor);
150 }
151 }
152 }