94 }
95
96 JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
97 try (StandardJavaFileManager fm = javaCompiler.getStandardFileManager(null, null, null)) {
98 DiagnosticListener<JavaFileObject> noErrors = diagnostic -> {
99 Assert.check(diagnostic.getKind() != Diagnostic.Kind.ERROR, diagnostic.toString());
100 };
101 String FS = File.separator;
102 String PS = File.pathSeparator;
103
104 //compile crules:
105 List<File> crulesFiles = Files.walk(crulesDir)
106 .filter(entry -> entry.getFileName().toString().endsWith(".java"))
107 .filter(entry -> entry.getParent().endsWith("crules"))
108 .map(entry -> entry.toFile())
109 .collect(Collectors.toList());
110
111 Path crulesTarget = targetDir.resolve("crules");
112 Files.createDirectories(crulesTarget);
113 List<String> crulesOptions = Arrays.asList(
114 "-XaddExports:jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
115 "-XaddExports:jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
116 "-XaddExports:jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
117 "-XaddExports:jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
118 "-XaddExports:jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
119 "-d", crulesTarget.toString());
120 javaCompiler.getTask(null, fm, noErrors, crulesOptions, null,
121 fm.getJavaFileObjectsFromFiles(crulesFiles)).call();
122 Path registration = crulesTarget.resolve("META-INF/services/com.sun.source.util.Plugin");
123 Files.createDirectories(registration.getParent());
124 try (Writer metaInfServices = Files.newBufferedWriter(registration, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
125 metaInfServices.write("crules.CodingRulesAnalyzerPlugin\n");
126 }
127
128 //generate CompilerProperties.java:
129 List<File> propertiesParserFiles =
130 Files.walk(crulesDir.resolve("propertiesparser"))
131 .filter(entry -> entry.getFileName().toString().endsWith(".java"))
132 .map(entry -> entry.toFile())
133 .collect(Collectors.toList());
134
135 Path propertiesParserTarget = targetDir.resolve("propertiesParser");
136 Files.createDirectories(propertiesParserTarget);
137 List<String> propertiesParserOptions = Arrays.asList(
138 "-d", propertiesParserTarget.toString());
161
162 Object result = propertiesParserRun.invoke(null, propertiesParserRunOptions, System.err);
163
164 if (!(result instanceof Boolean) || !(Boolean) result) {
165 throw new AssertionError("Cannot parse properties: " + result);
166 }
167
168 //compile langtools sources with crules enabled:
169 List<File> sources = sourceDirs.stream()
170 .flatMap(dir -> silentFilesWalk(dir))
171 .filter(entry -> entry.getFileName().toString().endsWith(".java"))
172 .map(p -> p.toFile())
173 .collect(Collectors.toList());
174
175 Path sourceTarget = targetDir.resolve("classes");
176 Files.createDirectories(sourceTarget);
177 String processorPath = crulesTarget + PS + crulesDir;
178
179 List<String> options = Arrays.asList(
180 "-d", sourceTarget.toString(),
181 "-modulesourcepath", mainSrcDir + FS + "*" + FS + "share" + FS + "classes" + PS
182 + genSrcTarget + FS + "*" + FS + "share" + FS + "classes",
183 "-XDaccessInternalAPI",
184 "-processorpath", processorPath,
185 "-Xplugin:coding_rules");
186 javaCompiler.getTask(null, fm, noErrors, options, null,
187 fm.getJavaFileObjectsFromFiles(sources)).call();
188 }
189 }
190
191 Stream<Path> silentFilesWalk(Path dir) throws IllegalStateException {
192 try {
193 return Files.walk(dir);
194 } catch (IOException ex) {
195 throw new IllegalStateException(ex);
196 }
197 }
198 }
|
94 }
95
96 JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
97 try (StandardJavaFileManager fm = javaCompiler.getStandardFileManager(null, null, null)) {
98 DiagnosticListener<JavaFileObject> noErrors = diagnostic -> {
99 Assert.check(diagnostic.getKind() != Diagnostic.Kind.ERROR, diagnostic.toString());
100 };
101 String FS = File.separator;
102 String PS = File.pathSeparator;
103
104 //compile crules:
105 List<File> crulesFiles = Files.walk(crulesDir)
106 .filter(entry -> entry.getFileName().toString().endsWith(".java"))
107 .filter(entry -> entry.getParent().endsWith("crules"))
108 .map(entry -> entry.toFile())
109 .collect(Collectors.toList());
110
111 Path crulesTarget = targetDir.resolve("crules");
112 Files.createDirectories(crulesTarget);
113 List<String> crulesOptions = Arrays.asList(
114 "--add-exports", "jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
115 "--add-exports", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
116 "--add-exports", "jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
117 "--add-exports", "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
118 "--add-exports", "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
119 "-d", crulesTarget.toString());
120 javaCompiler.getTask(null, fm, noErrors, crulesOptions, null,
121 fm.getJavaFileObjectsFromFiles(crulesFiles)).call();
122 Path registration = crulesTarget.resolve("META-INF/services/com.sun.source.util.Plugin");
123 Files.createDirectories(registration.getParent());
124 try (Writer metaInfServices = Files.newBufferedWriter(registration, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
125 metaInfServices.write("crules.CodingRulesAnalyzerPlugin\n");
126 }
127
128 //generate CompilerProperties.java:
129 List<File> propertiesParserFiles =
130 Files.walk(crulesDir.resolve("propertiesparser"))
131 .filter(entry -> entry.getFileName().toString().endsWith(".java"))
132 .map(entry -> entry.toFile())
133 .collect(Collectors.toList());
134
135 Path propertiesParserTarget = targetDir.resolve("propertiesParser");
136 Files.createDirectories(propertiesParserTarget);
137 List<String> propertiesParserOptions = Arrays.asList(
138 "-d", propertiesParserTarget.toString());
161
162 Object result = propertiesParserRun.invoke(null, propertiesParserRunOptions, System.err);
163
164 if (!(result instanceof Boolean) || !(Boolean) result) {
165 throw new AssertionError("Cannot parse properties: " + result);
166 }
167
168 //compile langtools sources with crules enabled:
169 List<File> sources = sourceDirs.stream()
170 .flatMap(dir -> silentFilesWalk(dir))
171 .filter(entry -> entry.getFileName().toString().endsWith(".java"))
172 .map(p -> p.toFile())
173 .collect(Collectors.toList());
174
175 Path sourceTarget = targetDir.resolve("classes");
176 Files.createDirectories(sourceTarget);
177 String processorPath = crulesTarget + PS + crulesDir;
178
179 List<String> options = Arrays.asList(
180 "-d", sourceTarget.toString(),
181 "--module-source-path", mainSrcDir + FS + "*" + FS + "share" + FS + "classes" + PS
182 + genSrcTarget + FS + "*" + FS + "share" + FS + "classes",
183 "-XDaccessInternalAPI",
184 "-processorpath", processorPath,
185 "-Xplugin:coding_rules");
186 javaCompiler.getTask(null, fm, noErrors, options, null,
187 fm.getJavaFileObjectsFromFiles(sources)).call();
188 }
189 }
190
191 Stream<Path> silentFilesWalk(Path dir) throws IllegalStateException {
192 try {
193 return Files.walk(dir);
194 } catch (IOException ex) {
195 throw new IllegalStateException(ex);
196 }
197 }
198 }
|