1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.jdeprscan.consumers;
20
21 import java.util.Collections;
22 import java.util.HashMap;
23 import java.util.HashSet;
24 import java.util.Map;
25 import java.util.Set;
26 import java.util.regex.Matcher;
27 import java.util.regex.Pattern;
28
29 import org.codehaus.plexus.util.cli.CommandLineUtils;
30 import org.codehaus.plexus.util.cli.StreamConsumer;
31
32
33
34
35
36
37
38 public class JDeprScanConsumer extends CommandLineUtils.StringStreamConsumer implements StreamConsumer {
39
40 private final Map<String, Set<String>> deprecatedClasses = new HashMap<>();
41
42 private final Map<String, Set<String>> deprecatedMethods = new HashMap<>();
43
44 public static final Pattern DEPRECATED_CLASS = Pattern.compile("^class (\\S+) uses deprecated class (\\S+)");
45
46 public static final Pattern DEPRECATED_METHOD = Pattern.compile("^class (\\S+) uses deprecated method (\\S+)");
47
48 public Map<String, Set<String>> getDeprecatedClasses() {
49 return Collections.unmodifiableMap(deprecatedClasses);
50 }
51
52 public Map<String, Set<String>> getDeprecatedMethods() {
53 return Collections.unmodifiableMap(deprecatedMethods);
54 }
55
56 @Override
57 public void consumeLine(String line) {
58 super.consumeLine(line);
59
60 Matcher deprecatedClassMatcher = DEPRECATED_CLASS.matcher(line);
61 matcherCollector(deprecatedClassMatcher, deprecatedClasses);
62
63 Matcher deprecatedMethodMatcher = DEPRECATED_METHOD.matcher(line);
64 matcherCollector(deprecatedMethodMatcher, deprecatedMethods);
65 }
66
67 private void matcherCollector(Matcher matcher, Map<String, Set<String>> deprecatedMethods) {
68 if (!matcher.find()) {
69 return;
70 }
71
72 Set<String> dm = deprecatedMethods.computeIfAbsent(matcher.group(1), k -> new HashSet<>());
73 dm.add(matcher.group(2));
74 }
75 }