diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java index b2bb0d0924e..73f86239713 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java @@ -94,6 +94,12 @@ public abstract class BaseFileManager implements JavaFileManager { // Initialize locations locations.update(log, lint, FSInfo.instance(context)); + // Apply options + options.whenReady(this::applyOptions); + } + + protected void applyOptions(Options options) { + // Setting this option is an indication that close() should defer actually closing // the file manager until after a specified period of inactivity. // This is to accommodate clients which save references to Symbols created for use @@ -106,16 +112,14 @@ public abstract class BaseFileManager implements JavaFileManager { // in seconds, of the period of inactivity to wait for, before the file manager // is actually closed. // See also deferredClose(). - options.whenReady(options -> { - String s = options.get("fileManager.deferClose"); - if (s != null) { - try { - deferredCloseTimeout = (int) (Float.parseFloat(s) * 1000); - } catch (NumberFormatException e) { - deferredCloseTimeout = 60 * 1000; // default: one minute, in millis - } + String s = options.get("fileManager.deferClose"); + if (s != null) { + try { + deferredCloseTimeout = (int) (Float.parseFloat(s) * 1000); + } catch (NumberFormatException e) { + deferredCloseTimeout = 60 * 1000; // default: one minute, in millis } - }); + } } protected Locations createLocations() { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java index 5cc6c69096c..9b61398ba92 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java @@ -80,6 +80,7 @@ import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; +import com.sun.tools.javac.util.Options; import static java.nio.charset.StandardCharsets.US_ASCII; import static java.nio.file.FileVisitOption.FOLLOW_LINKS; @@ -109,7 +110,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil private static final Set SOURCE_OR_CLASS = Set.of(JavaFileObject.Kind.SOURCE, JavaFileObject.Kind.CLASS); - protected boolean symbolFileEnabled; + protected boolean symbolFileEnabled = true; private PathFactory pathFactory = Paths::get; @@ -169,8 +170,12 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil @Override public void setContext(Context context) { super.setContext(context); - fsInfo = FSInfo.instance(context); + } + + @Override + protected void applyOptions(Options options) { + super.applyOptions(options); symbolFileEnabled = !options.isSet("ignore.symbol.file"); diff --git a/test/langtools/tools/javac/options/JavadocIgnoreSymbolFile.java b/test/langtools/tools/javac/options/JavadocIgnoreSymbolFile.java new file mode 100644 index 00000000000..24c24bc3eee --- /dev/null +++ b/test/langtools/tools/javac/options/JavadocIgnoreSymbolFile.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025, 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 + * 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 8348038 + * @summary Verify use of "-XDignore.symbol.file=true" doesn't cause assertion failure + * @modules jdk.javadoc/jdk.javadoc.internal.tool + */ + +import java.io.File; +import java.io.PrintWriter; +import java.io.StringWriter; + +public class JavadocIgnoreSymbolFile { + + public static void main(String[] args) { + String[] javadocArgs = new String[] { + "-XDignore.symbol.file=true" + }; + StringWriter buf = new StringWriter(); + try (PrintWriter pw = new PrintWriter(buf)) { + jdk.javadoc.internal.tool.Main.execute(javadocArgs, pw); + } + String expected = "error: No modules, packages or classes specified. 1 error"; + String actual = buf.toString().trim().replaceAll("\\s+", " "); + if (!actual.equals(expected)) + throw new AssertionError("unexpected output:\n" + actual); + } +}