# HG changeset patch # User cushon # Date 1516922293 28800 # Node ID f944d1b7ab25bd24b1c237455d6de9cba7c6100f # Parent 4cf06ada7fa2ddbf62f3efa8aec773861ce4f935 8179373: javac -verbose logs the class path multiple times Reviewed-by: martin diff -r 4cf06ada7fa2 -r f944d1b7ab25 src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Mon Jan 29 10:48:13 2018 -0800 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Thu Jan 25 15:18:13 2018 -0800 @@ -633,6 +633,7 @@ boolean haveSourcePath = includeSourcePath && fileManager.hasLocation(SOURCE_PATH); if (verbose && verbosePath) { + verbosePath = false; // print once per compile if (fileManager instanceof StandardJavaFileManager) { StandardJavaFileManager fm = (StandardJavaFileManager)fileManager; if (haveSourcePath && wantSourceFiles) { diff -r 4cf06ada7fa2 -r f944d1b7ab25 test/langtools/tools/javac/jvm/VerboseClassPathTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/langtools/tools/javac/jvm/VerboseClassPathTest.java Thu Jan 25 15:18:13 2018 -0800 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2018, Google Inc. 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8179373 + * @summary javac -verbose logs the class path multiple times + * @modules jdk.compiler + * @run main VerboseClassPathTest + */ + +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.spi.ToolProvider; + +public class VerboseClassPathTest { + public static void main(String... args) throws Exception { + new VerboseClassPathTest().run(); + } + + void run() throws Exception { + String className = getClass().getName(); + Path testSrc = Paths.get(System.getProperty("test.src")); + Path file = testSrc.resolve(className + ".java"); + ToolProvider javac = ToolProvider.findFirst("javac").orElseThrow(); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw, true); + int rc = + javac.run( + pw, + pw, + "-d", + ",", + "-source", + "8", + "-target", + "8", + "-verbose", + file.toString()); + String log = sw.toString(); + System.out.println(log); + if (rc != 0) { + throw new Exception("compilation failed: rc=" + rc); + } + String expect = "[search path for class files:"; + long count = + new BufferedReader(new StringReader(log)) + .lines() + .filter(line -> line.startsWith(expect)) + .count(); + if (count != 1) { + throw new Exception("expected '" + expect + "' to appear once, actual: " + count); + } + } +}