1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.meta;
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.io.OutputStream;
25 import java.nio.charset.StandardCharsets;
26 import java.nio.file.Files;
27 import java.nio.file.Path;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.stream.Collectors;
31 import java.util.stream.Stream;
32
33 import com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.OutputStreamOptions;
34 import com.puppycrawl.tools.checkstyle.Checker;
35 import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
36 import com.puppycrawl.tools.checkstyle.MetadataGeneratorLogger;
37 import com.puppycrawl.tools.checkstyle.TreeWalker;
38 import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
39
40
41 public final class MetadataGeneratorUtil {
42
43
44 private MetadataGeneratorUtil() {
45 }
46
47
48
49
50
51
52
53
54
55
56 public static void generate(String path, OutputStream out, String... moduleFolders)
57 throws IOException, CheckstyleException {
58 JavadocMetadataScraper.resetModuleDetailsStore();
59
60 final Checker checker = new Checker();
61 checker.setModuleClassLoader(Checker.class.getClassLoader());
62 final DefaultConfiguration scraperCheckConfig =
63 new DefaultConfiguration(JavadocMetadataScraper.class.getName());
64 final DefaultConfiguration defaultConfiguration =
65 new DefaultConfiguration("configuration");
66 final DefaultConfiguration treeWalkerConfig =
67 new DefaultConfiguration(TreeWalker.class.getName());
68 defaultConfiguration.addProperty("charset", StandardCharsets.UTF_8.name());
69 defaultConfiguration.addChild(treeWalkerConfig);
70 treeWalkerConfig.addChild(scraperCheckConfig);
71 checker.configure(defaultConfiguration);
72
73 checker.addListener(new MetadataGeneratorLogger(out, OutputStreamOptions.NONE));
74
75 final List<File> moduleFiles = getTargetFiles(path, moduleFolders);
76
77 checker.process(moduleFiles);
78 }
79
80
81
82
83
84
85
86
87
88 private static List<File> getTargetFiles(String path, String... moduleFolders)
89 throws IOException {
90 final List<File> validFiles = new ArrayList<>();
91 for (String folder : moduleFolders) {
92 try (Stream<Path> files = Files.walk(Path.of(path + "/" + folder))) {
93 validFiles.addAll(
94 files.map(Path::toFile)
95 .filter(file -> {
96 final String fileName = file.getName();
97 return fileName.endsWith("SuppressWarningsHolder.java")
98 || fileName.endsWith("Check.java")
99 || fileName.endsWith("Filter.java");
100 })
101 .collect(Collectors.toUnmodifiableList()));
102 }
103 }
104
105 return validFiles;
106 }
107 }