# HG changeset patch # User jjg # Date 1484623443 0 # Node ID dec2417f1af850554659aeaa0f75196d7c5ae1f5 # Parent bafda2c80afea380cd493b037fa6887d9688c454 8008949: javadoc stopped copying doc-files Reviewed-by: bpatel diff -r bafda2c80afe -r dec2417f1af8 src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java Fri Oct 28 03:35:37 2016 +0100 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java Tue Jan 17 03:24:03 2017 +0000 @@ -81,6 +81,9 @@ } try { doclet.startGeneration(root); + } catch (Configuration.Fault f) { + root.printError(f.getMessage()); + return false; } catch (Exception exc) { exc.printStackTrace(); return false; @@ -111,7 +114,7 @@ * * @see com.sun.javadoc.RootDoc */ - private void startGeneration(RootDoc root) throws Exception { + private void startGeneration(RootDoc root) throws Configuration.Fault, Exception { if (root.classes().length == 0) { configuration.message. error("doclet.No_Public_Classes_To_Document"); diff -r bafda2c80afe -r dec2417f1af8 src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java Fri Oct 28 03:35:37 2016 +0100 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java Tue Jan 17 03:24:03 2017 +0000 @@ -49,6 +49,21 @@ public abstract class Configuration { /** + * Exception used to report a problem during setOptions. + */ + public class Fault extends Exception { + private static final long serialVersionUID = 0; + + Fault(String msg) { + super(msg); + } + + Fault(String msg, Exception cause) { + super(msg, cause); + } + } + + /** * The factory for builders. */ protected BuilderFactory builderFactory; @@ -246,7 +261,7 @@ * @param options The array of option names and values. * @throws DocletAbortException */ - public abstract void setSpecificDocletOptions(String[][] options); + public abstract void setSpecificDocletOptions(String[][] options) throws Fault; /** * Return the doclet specific {@link MessageRetriever} @@ -356,15 +371,26 @@ * * @param options the two dimensional array of options. */ - public void setOptions(String[][] options) { + public void setOptions(String[][] options) throws Fault { LinkedHashSet customTagStrs = new LinkedHashSet(); + + // Some options, specifically -link and -linkoffline, require that + // the output directory has already been created: so do that first. for (int oi = 0; oi < options.length; ++oi) { String[] os = options[oi]; String opt = os[0].toLowerCase(); if (opt.equals("-d")) { destDirName = addTrailingFileSep(os[1]); docFileDestDirName = destDirName; - } else if (opt.equals("-docfilessubdirs")) { + ensureOutputDirExists(); + break; + } + } + + for (int oi = 0; oi < options.length; ++oi) { + String[] os = options[oi]; + String opt = os[0].toLowerCase(); + if (opt.equals("-docfilessubdirs")) { copydocfilesubdirs = true; } else if (opt.equals("-docencoding")) { docencoding = os[1]; @@ -442,12 +468,29 @@ * * @throws DocletAbortException */ - public void setOptions() { + public void setOptions() throws Fault { initPackageArray(); setOptions(root.options()); setSpecificDocletOptions(root.options()); } + private void ensureOutputDirExists() throws Fault { + File destDir = new File(destDirName); + if (!destDir.exists()) { + //Create the output directory (in case it doesn't exist yet) + root.printNotice(getText("doclet.dest_dir_create", destDirName)); + destDir.mkdirs(); + } else if (!destDir.isDirectory()) { + throw new Fault(getText( + "doclet.destination_directory_not_directory_0", + destDir.getPath())); + } else if (!destDir.canWrite()) { + throw new Fault(getText( + "doclet.destination_directory_not_writable_0", + destDir.getPath())); + } + } + /** * Initialize the taglet manager. The strings to initialize the simple custom tags should @@ -539,26 +582,7 @@ for (int oi = 0; oi < options.length; oi++) { String[] os = options[oi]; String opt = os[0].toLowerCase(); - if (opt.equals("-d")) { - String destdirname = addTrailingFileSep(os[1]); - File destDir = new File(destdirname); - if (!destDir.exists()) { - //Create the output directory (in case it doesn't exist yet) - reporter.printNotice(getText("doclet.dest_dir_create", - destdirname)); - (new File(destdirname)).mkdirs(); - } else if (!destDir.isDirectory()) { - reporter.printError(getText( - "doclet.destination_directory_not_directory_0", - destDir.getPath())); - return false; - } else if (!destDir.canWrite()) { - reporter.printError(getText( - "doclet.destination_directory_not_writable_0", - destDir.getPath())); - return false; - } - } else if (opt.equals("-docencoding")) { + if (opt.equals("-docencoding")) { docencodingfound = true; if (!checkOutputFileEncoding(os[1], reporter)) { return false; diff -r bafda2c80afe -r dec2417f1af8 test/com/sun/javadoc/testDocFiles/TestDocFiles.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocFiles/TestDocFiles.java Tue Jan 17 03:24:03 2017 +0000 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2013, 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 8008949 + * @summary verify that doc-files get copied + * @library ../lib/ + * @build JavadocTester + * @build TestDocFiles + * @run main TestDocFiles + */ + +public class TestDocFiles extends JavadocTester { + + private static final String BUG_ID = "8008949"; + private static final String[][] TEST = { + {"tmp" + FS + "pkg" + FS + "doc-files" + FS + "test.txt", "test file"}}; + + private static final String[] ARGS = + new String[] { + "-d", "tmp", "-sourcepath", SRC_DIR, "pkg"}; + + /** + * The entry point of the test. + * @param args the array of command line arguments. + */ + public static void main(String[] args) { + TestDocFiles tester = new TestDocFiles(); + run(tester, ARGS, TEST, NO_TEST); + tester.printSummary(); + } + + /** + * {@inheritDoc} + */ + public String getBugId() { + return BUG_ID; + } + + /** + * {@inheritDoc} + */ + public String getBugName() { + return getClass().getName(); + } +} diff -r bafda2c80afe -r dec2417f1af8 test/com/sun/javadoc/testDocFiles/pkg/Test.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocFiles/pkg/Test.java Tue Jan 17 03:24:03 2017 +0000 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2002, 2013, 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. + */ + +package pkg; + +public class Test { } + diff -r bafda2c80afe -r dec2417f1af8 test/com/sun/javadoc/testDocFiles/pkg/doc-files/test.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocFiles/pkg/doc-files/test.txt Tue Jan 17 03:24:03 2017 +0000 @@ -0,0 +1,2 @@ +this is a test file +