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 java.util.HashSet;
22 import java.util.Set;
23
24 import org.objectweb.asm.Type;
25
26
27
28
29
30
31 public class ResultCollector {
32
33 private final Set<String> classes = new HashSet<>();
34
35
36
37
38
39
40 public Set<String> getDependencies() {
41 return classes;
42 }
43
44
45
46
47
48
49 public void addName(String name) {
50 if (name == null) {
51 return;
52 }
53
54
55 if (name.charAt(0) == '[') {
56 int i = 0;
57 do {
58 ++i;
59 } while (name.charAt(i) == '[');
60 if (name.charAt(i) != 'L') {
61
62 return;
63 }
64 name = name.substring(i + 1, name.length() - 1);
65 }
66
67
68 add(name.replace('/', '.'));
69 }
70
71 void addDesc(final String desc) {
72 addType(Type.getType(desc));
73 }
74
75 void addType(final Type t) {
76 switch (t.getSort()) {
77 case Type.ARRAY:
78 addType(t.getElementType());
79 break;
80
81 case Type.METHOD:
82 addMethodDesc(t.getDescriptor());
83 break;
84
85 case Type.OBJECT:
86 addName(t.getClassName());
87 break;
88 default:
89 }
90 }
91
92
93
94
95
96
97 public void add(String name) {
98
99 if (name.indexOf('$') < 0) {
100 classes.add(name);
101 }
102 }
103
104 void addNames(final String[] names) {
105 if (names == null) {
106 return;
107 }
108
109 for (String name : names) {
110 addName(name);
111 }
112 }
113
114 void addMethodDesc(final String desc) {
115 addType(Type.getReturnType(desc));
116
117 Type[] types = Type.getArgumentTypes(desc);
118
119 for (Type type : types) {
120 addType(type);
121 }
122 }
123 }