< prev index next >

test/tools/all/RunCodingRules.java

Print this page




  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 }
< prev index next >