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