--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java Thu Feb 28 14:05:52 2013 +0000
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java Fri Mar 01 10:47:39 2013 -0800
@@ -80,6 +80,9 @@
}
try {
doclet.startGeneration(root);
+ } catch (Configuration.Fault f) {
+ root.printError(f.getMessage());
+ return false;
} catch (Exception exc) {
exc.printStackTrace();
return false;
@@ -110,7 +113,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");
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java Thu Feb 28 14:05:52 2013 +0000
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java Fri Mar 01 10:47:39 2013 -0800
@@ -54,6 +54,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;
@@ -257,7 +272,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}
@@ -413,15 +428,26 @@
*
* @param options the two dimensional array of options.
*/
- public void setOptions(String[][] options) {
+ public void setOptions(String[][] options) throws Fault {
LinkedHashSet<String[]> customTagStrs = new LinkedHashSet<String[]>();
+
+ // 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];
@@ -503,7 +529,7 @@
*
* @throws DocletAbortException
*/
- public void setOptions() {
+ public void setOptions() throws Fault {
initPackageArray();
setOptions(root.options());
if (!profilespath.isEmpty()) {
@@ -517,6 +543,23 @@
setSpecificDocletOptions(root.options());
}
+ private void ensureOutputDirExists() throws Fault {
+ DocFile destDir = DocFile.createFileForDirectory(this, 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
@@ -650,26 +693,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]);
- DocFile destDir = DocFile.createFileForDirectory(this, destdirname);
- if (!destDir.exists()) {
- //Create the output directory (in case it doesn't exist yet)
- reporter.printNotice(getText("doclet.dest_dir_create",
- destdirname));
- destDir.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;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testDocFiles/TestDocFiles.java Fri Mar 01 10:47:39 2013 -0800
@@ -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();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testDocFiles/pkg/Test.java Fri Mar 01 10:47:39 2013 -0800
@@ -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 { }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testDocFiles/pkg/doc-files/test.txt Fri Mar 01 10:47:39 2013 -0800
@@ -0,0 +1,2 @@
+this is a test file
+