8199768: jdk/test/lib/compiler/CompilerUtils.java needs to provide more control over compilation
authordholmes
Mon, 19 Mar 2018 17:46:49 -0400
changeset 49264 2910110c4381
parent 49263 78af880eec61
child 49266 778e4516409c
8199768: jdk/test/lib/compiler/CompilerUtils.java needs to provide more control over compilation Reviewed-by: psandoz, alanb
test/lib/jdk/test/lib/compiler/CompilerUtils.java
--- a/test/lib/jdk/test/lib/compiler/CompilerUtils.java	Mon Mar 19 10:11:07 2018 -0700
+++ b/test/lib/jdk/test/lib/compiler/CompilerUtils.java	Mon Mar 19 17:46:49 2018 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,8 +47,14 @@
      * {@code <destination>/**}. The destination directory will be created if
      * it doesn't exist.
      *
+     * Equivalent to calling {@code compile(source, destination, true, options);}.
+     *
      * All warnings/errors emitted by the compiler are output to System.out/err.
      *
+     * @param source Path to the source directory
+     * @param destination Path to the destination directory
+     * @param options Any options to pass to the compiler
+     *
      * @return true if the compilation is successful
      *
      * @throws IOException
@@ -60,6 +66,36 @@
     public static boolean compile(Path source, Path destination, String... options)
         throws IOException
     {
+        return compile(source, destination, true, options);
+    }
+
+    /**
+     * Compile all the java sources in {@code <source>} and optionally its
+     * subdirectories, to
+     * {@code <destination>}. The destination directory will be created if
+     * it doesn't exist.
+     *
+     * All warnings/errors emitted by the compiler are output to System.out/err.
+     *
+     * @param source Path to the source directory
+     * @param destination Path to the destination directory
+     * @param recurse If {@code true} recurse into any {@code source} subdirectories
+     *        to compile all java source files; else only compile those directly in
+     *        {@code source}.
+     * @param options Any options to pass to the compiler
+     *
+     * @return true if the compilation is successful
+     *
+     * @throws IOException
+     *         if there is an I/O error scanning the source tree or
+     *         creating the destination directory
+     * @throws UnsupportedOperationException
+     *         if there is no system java compiler
+     */
+
+   public static boolean compile(Path source, Path destination, boolean recurse, String... options)
+        throws IOException
+    {
         JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
         if (compiler == null) {
             // no compiler available
@@ -69,7 +105,7 @@
         StandardJavaFileManager jfm = compiler.getStandardFileManager(null, null, null);
 
         List<Path> sources
-            = Files.find(source, Integer.MAX_VALUE,
+            = Files.find(source, (recurse ? Integer.MAX_VALUE : 1),
                 (file, attrs) -> (file.toString().endsWith(".java")))
                 .collect(Collectors.toList());