Browse Source

allow ressource collections for source files in <javadoc>

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@392027 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 19 years ago
parent
commit
49727a3da8
4 changed files with 96 additions and 16 deletions
  1. +9
    -1
      docs/manual/CoreTasks/javadoc.html
  2. +22
    -0
      src/etc/testcases/taskdefs/javadoc/javadoc.xml
  3. +53
    -15
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  4. +12
    -0
      src/testcases/org/apache/tools/ant/taskdefs/JavadocTest.java

+ 9
- 1
docs/manual/CoreTasks/javadoc.html View File

@@ -484,7 +484,7 @@ the nested <code>&lt;packageset&gt;</code> elements.</p>
<p>A <a href="../CoreTypes/fileset.html">FileSet</a>. All matched
files will be passed to javadoc as source files. Ant will
automatically add the include pattern <code>**/*.java</code> (and
<code>**/package.html</code> if inncludenosourcepackages is true) to
<code>**/package.html</code> if includenosourcepackages is true) to
these filesets.</p>

<p>Nested filesets can be used to document sources that are in the
@@ -497,6 +497,14 @@ increases javadocs performance.</p>
<code>defaultexcludes</code> attributes of the task have no effect on
the nested <code>&lt;fileset&gt;</code> elements.</p>

<h4>sourcefiles</h4>

<p>A container for arbitrary file system based <a
href="../CoreTypes/resources.html#collection">resource
collections</a>. All files contained in any of the nested collections
(this includes nested filesets, filelists or paths) will be passed to
javadoc as source files.</p>

<h4>package</h4>
<p>Same as one entry in the list given by <code>packagenames</code>.</p>



+ 22
- 0
src/etc/testcases/taskdefs/javadoc/javadoc.xml View File

@@ -56,6 +56,28 @@
</javadoc>
</target>

<target name="nestedFilesetNoPatterns">
<javadoc packagenames="*" destdir="javadoc">
<fileset dir="java/"/>
</javadoc>
</target>

<target name="doublyNestedFileset">
<javadoc packagenames="*" destdir="javadoc">
<sourcefiles>
<fileset dir="java/" includes="**/*.java"/>
</sourcefiles>
</javadoc>
</target>

<target name="doublyNestedFilesetNoPatterns">
<javadoc packagenames="*" destdir="javadoc">
<sourcefiles>
<fileset dir="java/"/>
</sourcefiles>
</javadoc>
</target>

<path id="path.filelist">
<pathelement location="."/>
<filelist dir="java/">


+ 53
- 15
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -25,7 +25,9 @@ import java.io.BufferedReader;
import java.io.FileReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Locale;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -41,6 +43,8 @@ import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PatternSet;
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JavaEnvUtils;

@@ -344,6 +348,23 @@ public class Javadoc extends Task {
}
}

/**
* Holds a collection of ResourceCollections.
*
* <p>A separate kind of container is needed since this task
* contains special handling for FileSets that has to occur at
* task runtime.</p>
*/
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.
*
* <p>All included files will be added as sourcefiles.</p>
* @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()));
}
}
}


+ 12
- 0
src/testcases/org/apache/tools/ant/taskdefs/JavadocTest.java View File

@@ -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");
}
}

Loading…
Cancel
Save