Author: peterreilly Date: Thu Aug 16 07:19:29 2007 New Revision: 566724 URL: http://svn.apache.org/viewvc?view=rev&rev=566724 Log: make huge method in a number of methods
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java?view=diff&rev=566724&r1=566723&r2=566724 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java Thu Aug 16 07:19:29 2007 @@ -74,6 +74,15 @@ * @ant.task category="java" */ public class Javadoc extends Task { + // Whether *this VM* is 1.4+ (but also check executable != null). + + private static final boolean JAVADOC_4 = + !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2) + && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3); + + private static final boolean JAVADOC_5 = JAVADOC_4 + && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4); + /** * Inner class used to manage doclet parameters. */ @@ -1614,58 +1623,185 @@ * @throws BuildException on error */ public void execute() throws BuildException { - if ("javadoc2".equals(getTaskType())) { - log("Warning: the task name <javadoc2> is deprecated. Use <javadoc> instead.", - Project.MSG_WARN); - } - - // Whether *this VM* is 1.4+ (but also check executable != null). - boolean javadoc4 = - !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2) - && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3); - boolean javadoc5 = javadoc4 - && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4); + checkTaskName(); Vector packagesToDoc = new Vector(); Path sourceDirs = new Path(getProject()); - if (packageList != null && sourcePath == null) { - String msg = "sourcePath attribute must be set when " - + "specifying packagelist."; - throw new BuildException(msg); - } + checkPackageAndSourcePath(); if (sourcePath != null) { sourceDirs.addExisting(sourcePath); } parsePackages(packagesToDoc, sourceDirs); + checkPackages(packagesToDoc, sourceDirs); + + Vector sourceFilesToDoc = (Vector) sourceFiles.clone(); + addSourceFiles(sourceFilesToDoc); + + checkPackagesToDoc(packagesToDoc, sourceFilesToDoc); + + log("Generating Javadoc", Project.MSG_INFO); + + Commandline toExecute = (Commandline) cmd.clone(); + if (executable != null) { + toExecute.setExecutable(executable); + } else { + toExecute.setExecutable(JavaEnvUtils.getJdkExecutable("javadoc")); + } + + // Javadoc arguments + generalJavadocArguments(toExecute); // general Javadoc arguments + doSourcePath(toExecute, sourceDirs); // sourcepath + doDoclet(toExecute); // arguments for default doclet + doBootPath(toExecute); // bootpath + doLinks(toExecute); // links arguments + doGroup(toExecute); // group attribute + doGroups(toExecute); // groups attribute + + // Javadoc 1.4 parameters + if (JAVADOC_4 || executable != null) { + doJava14(toExecute); + if (breakiterator && (doclet == null || JAVADOC_5)) { + toExecute.createArgument().setValue("-breakiterator"); + } + } else { + doNotJava14(); + } + // Javadoc 1.2/1.3 parameters: + if (!JAVADOC_4 || executable != null) { + if (old) { + toExecute.createArgument().setValue("-1.1"); + } + } else { + if (old) { + log("Javadoc 1.4 doesn't support the -1.1 switch anymore", + Project.MSG_WARN); + } + } + // If using an external file, write the command line options to it + if (useExternalFile && JAVADOC_4) { + writeExternalArgs(toExecute); + } + + File tmpList = null; + PrintWriter srcListWriter = null; + + try { + /** + * Write sourcefiles and package names to a temporary file + * if requested. + */ + if (useExternalFile) { + tmpList = FILE_UTILS.createTempFile("javadoc", "", null); + tmpList.deleteOnExit(); + toExecute.createArgument() + .setValue("@" + tmpList.getAbsolutePath()); + srcListWriter = new PrintWriter( + new FileWriter(tmpList.getAbsolutePath(), + true)); + } + + doSourceAndPackageNames( + toExecute, packagesToDoc, sourceFilesToDoc, + useExternalFile, tmpList, srcListWriter); + } catch (IOException e) { + tmpList.delete(); + throw new BuildException("Error creating temporary file", + e, getLocation()); + } finally { + if (srcListWriter != null) { + srcListWriter.close(); + } + } + + if (packageList != null) { + toExecute.createArgument().setValue("@" + packageList); + } + log(toExecute.describeCommand(), Project.MSG_VERBOSE); + + log("Javadoc execution", Project.MSG_INFO); + + JavadocOutputStream out = new JavadocOutputStream(Project.MSG_INFO); + JavadocOutputStream err = new JavadocOutputStream(Project.MSG_WARN); + Execute exe = new Execute(new PumpStreamHandler(out, err)); + exe.setAntRun(getProject()); + + /* + * No reason to change the working directory as all filenames and + * path components have been resolved already. + * + * Avoid problems with command line length in some environments. + */ + exe.setWorkingDirectory(null); + try { + exe.setCommandline(toExecute.getCommandline()); + int ret = exe.execute(); + if (ret != 0 && failOnError) { + throw new BuildException("Javadoc returned " + ret, + getLocation()); + } + } catch (IOException e) { + throw new BuildException("Javadoc failed: " + e, e, getLocation()); + } finally { + if (tmpList != null) { + tmpList.delete(); + tmpList = null; + } + out.logFlush(); + err.logFlush(); + try { + out.close(); + err.close(); + } catch (IOException e) { + // ignore + } + } + } + + private void checkTaskName() { + if ("javadoc2".equals(getTaskType())) { + log("Warning: the task name <javadoc2> is deprecated." + + " Use <javadoc> instead.", + Project.MSG_WARN); + } + } + + private void checkPackageAndSourcePath() { + if (packageList != null && sourcePath == null) { + String msg = "sourcePath attribute must be set when " + + "specifying packagelist."; + throw new BuildException(msg); + } + } + + private void checkPackages(Vector packagesToDoc, Path sourceDirs) { if (packagesToDoc.size() != 0 && sourceDirs.size() == 0) { String msg = "sourcePath attribute must be set when " + "specifying package names."; throw new BuildException(msg); } + } - Vector sourceFilesToDoc = (Vector) sourceFiles.clone(); - addSourceFiles(sourceFilesToDoc); - + private void checkPackagesToDoc( + Vector packagesToDoc, Vector sourceFilesToDoc) { if (packageList == null && packagesToDoc.size() == 0 && sourceFilesToDoc.size() == 0) { throw new BuildException("No source files and no packages have " + "been specified."); } + } - log("Generating Javadoc", Project.MSG_INFO); - - Commandline toExecute = (Commandline) cmd.clone(); - if (executable != null) { - toExecute.setExecutable(executable); - } else { - toExecute.setExecutable(JavaEnvUtils.getJdkExecutable("javadoc")); + private void doSourcePath(Commandline toExecute, Path sourceDirs) { + if (sourceDirs.size() > 0) { + toExecute.createArgument().setValue("-sourcepath"); + toExecute.createArgument().setPath(sourceDirs); } + } - // ------------------------------------------ general Javadoc arguments + private void generalJavadocArguments(Commandline toExecute) { if (doctitle != null) { toExecute.createArgument().setValue("-doctitle"); toExecute.createArgument().setValue(expand(doctitle.getText())); @@ -1693,10 +1829,6 @@ toExecute.createArgument().setValue("-classpath"); toExecute.createArgument().setPath(classpath); } - if (sourceDirs.size() > 0) { - toExecute.createArgument().setValue("-sourcepath"); - toExecute.createArgument().setPath(sourceDirs); - } if (version && doclet == null) { toExecute.createArgument().setValue("-version"); @@ -1708,9 +1840,9 @@ if (doclet == null && destDir == null) { throw new BuildException("destdir attribute must be set!"); } + } - // ---------------------------- javadoc2 arguments for default doclet - + private void doDoclet(Commandline toExecute) { if (doclet != null) { if (doclet.getName() == null) { throw new BuildException("The doclet name must be " @@ -1742,6 +1874,49 @@ } } } + } + + private void writeExternalArgs(Commandline toExecute) { + // If using an external file, write the command line options to it + File optionsTmpFile = null; + PrintWriter optionsListWriter = null; + try { + optionsTmpFile = FILE_UTILS.createTempFile( + "javadocOptions", "", null); + optionsTmpFile.deleteOnExit(); + String[] listOpt = toExecute.getArguments(); + toExecute.clearArgs(); + toExecute.createArgument().setValue( + "@" + optionsTmpFile.getAbsolutePath()); + optionsListWriter = new PrintWriter( + new FileWriter(optionsTmpFile.getAbsolutePath(), true)); + for (int i = 0; i < listOpt.length; i++) { + String string = listOpt[i]; + if (string.startsWith("-J-")) { + toExecute.createArgument().setValue(string); + } else { + if (string.startsWith("-")) { + optionsListWriter.print(string); + optionsListWriter.print(" "); + } else { + optionsListWriter.println(quoteString(string)); + } + } + } + optionsListWriter.close(); + } catch (IOException ex) { + if (optionsTmpFile != null) { + optionsTmpFile.delete(); + } + throw new BuildException( + "Error creating or writing temporary file for javadoc options", + ex, getLocation()); + } finally { + FILE_UTILS.close(optionsListWriter); + } + } + + private void doBootPath(Commandline toExecute) { Path bcp = new Path(getProject()); if (bootclasspath != null) { bcp.append(bootclasspath); @@ -1751,8 +1926,9 @@ toExecute.createArgument().setValue("-bootclasspath"); toExecute.createArgument().setPath(bcp); } + } - // add the links arguments + private void doLinks(Commandline toExecute) { if (links.size() != 0) { for (Enumeration e = links.elements(); e.hasMoreElements();) { LinkArgument la = (LinkArgument) e.nextElement(); @@ -1830,7 +2006,9 @@ } } } + } + private void doGroup(Commandline toExecute) { // add the single group arguments // Javadoc 1.2 rules: // Multiple -group args allowed. @@ -1857,8 +2035,10 @@ } } } + } - // add the group arguments + // add the group arguments + private void doGroups(Commandline toExecute) { if (groups.size() != 0) { for (Enumeration e = groups.elements(); e.hasMoreElements();) { GroupArgument ga = (GroupArgument) e.nextElement(); @@ -1874,266 +2054,145 @@ toExecute.createArgument().setValue(packages); } } + } - // Javadoc 1.4 parameters - if (javadoc4 || executable != null) { - for (Enumeration e = tags.elements(); e.hasMoreElements();) { - Object element = e.nextElement(); - if (element instanceof TagArgument) { - TagArgument ta = (TagArgument) element; - File tagDir = ta.getDir(getProject()); - if (tagDir == null) { - // The tag element is not used as a fileset, - // but specifies the tag directly. - toExecute.createArgument().setValue ("-tag"); - toExecute.createArgument() - .setValue (ta.getParameter()); - } else { - // The tag element is used as a - // fileset. Parse all the files and create - // -tag arguments. - DirectoryScanner tagDefScanner = - ta.getDirectoryScanner(getProject()); - String[] files = tagDefScanner.getIncludedFiles(); - for (int i = 0; i < files.length; i++) { - File tagDefFile = new File(tagDir, files[i]); - try { - BufferedReader in - = new BufferedReader( - new FileReader(tagDefFile) - ); - String line = null; - while ((line = in.readLine()) != null) { - toExecute.createArgument() - .setValue("-tag"); - toExecute.createArgument() - .setValue(line); - } - in.close(); - } catch (IOException ioe) { - throw new BuildException("Couldn't read " - + " tag file from " - + tagDefFile.getAbsolutePath(), ioe); + // Do java1.4 arguments + private void doJava14(Commandline toExecute) { + for (Enumeration e = tags.elements(); e.hasMoreElements();) { + Object element = e.nextElement(); + if (element instanceof TagArgument) { + TagArgument ta = (TagArgument) element; + File tagDir = ta.getDir(getProject()); + if (tagDir == null) { + // The tag element is not used as a fileset, + // but specifies the tag directly. + toExecute.createArgument().setValue ("-tag"); + toExecute.createArgument() + .setValue (ta.getParameter()); + } else { + // The tag element is used as a + // fileset. Parse all the files and create + // -tag arguments. + DirectoryScanner tagDefScanner = + ta.getDirectoryScanner(getProject()); + String[] files = tagDefScanner.getIncludedFiles(); + for (int i = 0; i < files.length; i++) { + File tagDefFile = new File(tagDir, files[i]); + try { + BufferedReader in + = new BufferedReader( + new FileReader(tagDefFile) + ); + String line = null; + while ((line = in.readLine()) != null) { + toExecute.createArgument() + .setValue("-tag"); + toExecute.createArgument() + .setValue(line); } + in.close(); + } catch (IOException ioe) { + throw new BuildException( + "Couldn't read " + + " tag file from " + + tagDefFile.getAbsolutePath(), ioe); } } - } else { - ExtensionInfo tagletInfo = (ExtensionInfo) element; - toExecute.createArgument().setValue("-taglet"); - toExecute.createArgument().setValue(tagletInfo - .getName()); - if (tagletInfo.getPath() != null) { - Path tagletPath = tagletInfo.getPath() - .concatSystemClasspath("ignore"); - if (tagletPath.size() != 0) { - toExecute.createArgument() - .setValue("-tagletpath"); - toExecute.createArgument().setPath(tagletPath); - } + } + } else { + ExtensionInfo tagletInfo = (ExtensionInfo) element; + toExecute.createArgument().setValue("-taglet"); + toExecute.createArgument().setValue(tagletInfo + .getName()); + if (tagletInfo.getPath() != null) { + Path tagletPath = tagletInfo.getPath() + .concatSystemClasspath("ignore"); + if (tagletPath.size() != 0) { + toExecute.createArgument() + .setValue("-tagletpath"); + toExecute.createArgument().setPath(tagletPath); } } } + } - String sourceArg = source != null ? source - : getProject().getProperty(MagicNames.BUILD_JAVAC_SOURCE); - if (sourceArg != null) { - toExecute.createArgument().setValue("-source"); - toExecute.createArgument().setValue(sourceArg); - } - - if (linksource && doclet == null) { - toExecute.createArgument().setValue("-linksource"); - } - if (breakiterator && (doclet == null || javadoc5)) { - toExecute.createArgument().setValue("-breakiterator"); - } - if (noqualifier != null && doclet == null) { - toExecute.createArgument().setValue("-noqualifier"); - toExecute.createArgument().setValue(noqualifier); - } - } else { - // Not 1.4+. - if (!tags.isEmpty()) { - log("-tag and -taglet options not supported on Javadoc < 1.4", - Project.MSG_VERBOSE); - } - if (source != null) { - log("-source option not supported on Javadoc < 1.4", - Project.MSG_VERBOSE); - } - if (linksource) { - log("-linksource option not supported on Javadoc < 1.4", - Project.MSG_VERBOSE); - } - if (breakiterator) { - log("-breakiterator option not supported on Javadoc < 1.4", - Project.MSG_VERBOSE); - } - if (noqualifier != null) { - log("-noqualifier option not supported on Javadoc < 1.4", - Project.MSG_VERBOSE); - } + String sourceArg = source != null ? source + : getProject().getProperty(MagicNames.BUILD_JAVAC_SOURCE); + if (sourceArg != null) { + toExecute.createArgument().setValue("-source"); + toExecute.createArgument().setValue(sourceArg); } - // Javadoc 1.2/1.3 parameters: - if (!javadoc4 || executable != null) { - if (old) { - toExecute.createArgument().setValue("-1.1"); - } - } else { - if (old) { - log("Javadoc 1.4 doesn't support the -1.1 switch anymore", - Project.MSG_WARN); - } + + if (linksource && doclet == null) { + toExecute.createArgument().setValue("-linksource"); } - // If using an external file, write the command line options to it - if (useExternalFile && javadoc4) { - writeExternalArgs(toExecute); + if (noqualifier != null && doclet == null) { + toExecute.createArgument().setValue("-noqualifier"); + toExecute.createArgument().setValue(noqualifier); } + } - File tmpList = null; - PrintWriter srcListWriter = null; - - try { - - /** - * Write sourcefiles and package names to a temporary file - * if requested. - */ - if (useExternalFile) { - if (tmpList == null) { - tmpList = FILE_UTILS.createTempFile("javadoc", "", null); - tmpList.deleteOnExit(); - toExecute.createArgument() - .setValue("@" + tmpList.getAbsolutePath()); - } - srcListWriter = new PrintWriter( - new FileWriter(tmpList.getAbsolutePath(), - true)); - } - - Enumeration e = packagesToDoc.elements(); - while (e.hasMoreElements()) { - String packageName = (String) e.nextElement(); - if (useExternalFile) { - srcListWriter.println(packageName); - } else { - toExecute.createArgument().setValue(packageName); - } - } - - e = sourceFilesToDoc.elements(); - while (e.hasMoreElements()) { - SourceFile sf = (SourceFile) e.nextElement(); - String sourceFileName = sf.getFile().getAbsolutePath(); - if (useExternalFile) { - // XXX what is the following doing? - // should it run if !javadoc4 && executable != null? - if (javadoc4 && sourceFileName.indexOf(" ") > -1) { - String name = sourceFileName; - if (File.separatorChar == '\\') { - name = sourceFileName.replace(File.separatorChar, '/'); - } - srcListWriter.println("\"" + name + "\""); - } else { - srcListWriter.println(sourceFileName); - } - } else { - toExecute.createArgument().setValue(sourceFileName); - } - } - - } catch (IOException e) { - tmpList.delete(); - throw new BuildException("Error creating temporary file", - e, getLocation()); - } finally { - if (srcListWriter != null) { - srcListWriter.close(); - } + private void doNotJava14() { + // Not 1.4+. + if (!tags.isEmpty()) { + log("-tag and -taglet options not supported on Javadoc < 1.4", + Project.MSG_VERBOSE); } - - if (packageList != null) { - toExecute.createArgument().setValue("@" + packageList); + if (source != null) { + log("-source option not supported on Javadoc < 1.4", + Project.MSG_VERBOSE); } - log(toExecute.describeCommand(), Project.MSG_VERBOSE); - - log("Javadoc execution", Project.MSG_INFO); - - JavadocOutputStream out = new JavadocOutputStream(Project.MSG_INFO); - JavadocOutputStream err = new JavadocOutputStream(Project.MSG_WARN); - Execute exe = new Execute(new PumpStreamHandler(out, err)); - exe.setAntRun(getProject()); - - /* - * No reason to change the working directory as all filenames and - * path components have been resolved already. - * - * Avoid problems with command line length in some environments. - */ - exe.setWorkingDirectory(null); - try { - exe.setCommandline(toExecute.getCommandline()); - int ret = exe.execute(); - if (ret != 0 && failOnError) { - throw new BuildException("Javadoc returned " + ret, - getLocation()); - } - } catch (IOException e) { - throw new BuildException("Javadoc failed: " + e, e, getLocation()); - } finally { - if (tmpList != null) { - tmpList.delete(); - tmpList = null; - } + if (linksource) { + log("-linksource option not supported on Javadoc < 1.4", + Project.MSG_VERBOSE); + } + if (breakiterator) { + log("-breakiterator option not supported on Javadoc < 1.4", + Project.MSG_VERBOSE); + } + if (noqualifier != null) { + log("-noqualifier option not supported on Javadoc < 1.4", + Project.MSG_VERBOSE); + } + } - out.logFlush(); - err.logFlush(); - try { - out.close(); - err.close(); - } catch (IOException e) { - // ignore + private void doSourceAndPackageNames( + Commandline toExecute, + Vector packagesToDoc, + Vector sourceFilesToDoc, + boolean useExternalFile, + File tmpList, + PrintWriter srcListWriter) + throws IOException { + Enumeration e = packagesToDoc.elements(); + while (e.hasMoreElements()) { + String packageName = (String) e.nextElement(); + if (useExternalFile) { + srcListWriter.println(packageName); + } else { + toExecute.createArgument().setValue(packageName); } } - } - private void writeExternalArgs(Commandline toExecute) { - // If using an external file, write the command line options to it - File optionsTmpFile = null; - PrintWriter optionsListWriter = null; - try { - optionsTmpFile = FILE_UTILS.createTempFile( - "javadocOptions", "", null); - optionsTmpFile.deleteOnExit(); - String[] listOpt = toExecute.getArguments(); - toExecute.clearArgs(); - toExecute.createArgument().setValue( - "@" + optionsTmpFile.getAbsolutePath()); - optionsListWriter = new PrintWriter( - new FileWriter(optionsTmpFile.getAbsolutePath(), true)); - for (int i = 0; i < listOpt.length; i++) { - String string = listOpt[i]; - if (string.startsWith("-J-")) { - toExecute.createArgument().setValue(string); - } else { - if (string.startsWith("-")) { - optionsListWriter.print(string); - optionsListWriter.print(" "); - } else { - optionsListWriter.println(quoteString(string)); + e = sourceFilesToDoc.elements(); + while (e.hasMoreElements()) { + SourceFile sf = (SourceFile) e.nextElement(); + String sourceFileName = sf.getFile().getAbsolutePath(); + if (useExternalFile) { + // XXX what is the following doing? + // should it run if !javadoc4 && executable != null? + if (JAVADOC_4 && sourceFileName.indexOf(" ") > -1) { + String name = sourceFileName; + if (File.separatorChar == '\\') { + name = sourceFileName.replace(File.separatorChar, '/'); } + srcListWriter.println("\"" + name + "\""); + } else { + srcListWriter.println(sourceFileName); } + } else { + toExecute.createArgument().setValue(sourceFileName); } - optionsListWriter.close(); - } catch (IOException ex) { - if (optionsTmpFile != null) { - optionsTmpFile.delete(); - } - throw new BuildException( - "Error creating or writing temporary file for javadoc options", - ex, getLocation()); - } finally { - FILE_UTILS.close(optionsListWriter); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]