From 49727a3da8d30bd6abcb219f140097f4a3b6fe95 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig <packageset>
elements.
A FileSet. All matched
files will be passed to javadoc as source files. Ant will
automatically add the include pattern **/*.java
(and
-**/package.html
if inncludenosourcepackages is true) to
+**/package.html
if includenosourcepackages is true) to
these filesets.
Nested filesets can be used to document sources that are in the @@ -497,6 +497,14 @@ increases javadocs performance.
defaultexcludes
attributes of the task have no effect on
the nested <fileset>
elements.
+A container for arbitrary file system based resource +collections. All files contained in any of the nested collections +(this includes nested filesets, filelists or paths) will be passed to +javadoc as source files.
+Same as one entry in the list given by packagenames
.
A separate kind of container is needed since this task + * contains special handling for FileSets that has to occur at + * task runtime.
+ */ + public class ResourceCollectionContainer { + private ArrayList rcs = new ArrayList(); + public void add(ResourceCollection rc) { + rcs.add(rc); + } + private Iterator iterator() { + return rcs.iterator(); + } + } + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); /** The command line built to execute Javadoc. */ @@ -412,7 +433,8 @@ public class Javadoc extends Task { private boolean old = false; private String executable = null; - private Vector fileSets = new Vector(); + private ResourceCollectionContainer nestedSourceFiles + = new ResourceCollectionContainer(); private Vector packageSets = new Vector(); /** @@ -1514,7 +1536,17 @@ public class Javadoc extends Task { * @since 1.5 */ public void addFileset(FileSet fs) { - fileSets.addElement(fs); + createSourceFiles().add(fs); + } + + /** + * Adds a container for resource collections. + * + *All included files will be added as sourcefiles.
+ * @since 1.7 + */ + public ResourceCollectionContainer createSourceFiles() { + return nestedSourceFiles; } /** @@ -1594,7 +1626,7 @@ public class Javadoc extends Task { } Vector sourceFilesToDoc = (Vector) sourceFiles.clone(); - addFileSets(sourceFilesToDoc); + addSourceFiles(sourceFilesToDoc); if (packageList == null && packagesToDoc.size() == 0 && sourceFilesToDoc.size() == 0) { @@ -2036,15 +2068,21 @@ public class Javadoc extends Task { } /** - * Add the files matched by the nested filesets to the Vector as - * SourceFile instances. + * Add the files matched by the nested source files to the Vector + * as SourceFile instances. * - * @since 1.5 + * @since 1.7 */ - private void addFileSets(Vector sf) { - Enumeration e = fileSets.elements(); - while (e.hasMoreElements()) { - FileSet fs = (FileSet) e.nextElement(); + private void addSourceFiles(Vector sf) { + Iterator e = nestedSourceFiles.iterator(); + while (e.hasNext()) { + ResourceCollection rc = (ResourceCollection) e.next(); + if (!rc.isFilesystemOnly()) { + throw new BuildException("only file system based resources are" + + " supported by javadoc"); + } + if (rc instanceof FileSet) { + FileSet fs = (FileSet) rc; if (!fs.hasPatterns() && !fs.hasSelectors()) { fs = (FileSet) fs.clone(); fs.createInclude().setName("**/*.java"); @@ -2052,11 +2090,11 @@ public class Javadoc extends Task { fs.createInclude().setName("**/package.html"); } } - File baseDir = fs.getDir(getProject()); - DirectoryScanner ds = fs.getDirectoryScanner(getProject()); - String[] files = ds.getIncludedFiles(); - for (int i = 0; i < files.length; i++) { - sf.addElement(new SourceFile(new File(baseDir, files[i]))); + } + Iterator iter = rc.iterator(); + while (iter.hasNext()) { + sf.addElement(new SourceFile(((FileResource) iter.next()) + .getFile())); } } } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/JavadocTest.java b/src/testcases/org/apache/tools/ant/taskdefs/JavadocTest.java index 2856894aa..c0bb5b675 100755 --- a/src/testcases/org/apache/tools/ant/taskdefs/JavadocTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/JavadocTest.java @@ -118,4 +118,16 @@ public class JavadocTest extends BuildFileTest { public void testNestedFilesetRefInPath() throws Exception { executeTarget("nestedFilesetRefInPath"); } + + public void testNestedFilesetNoPatterns() throws Exception { + executeTarget("nestedFilesetNoPatterns"); + } + + public void testDoublyNestedFileset() throws Exception { + executeTarget("doublyNestedFileset"); + } + + public void testDoublyNestedFilesetNoPatterns() throws Exception { + executeTarget("doublyNestedFilesetNoPatterns"); + } }