Author: peterreilly
Date: Wed Nov  1 15:19:33 2006
New Revision: 470134

URL: http://svn.apache.org/viewvc?view=rev&rev=470134
Log:
bugzilla report 40852: useextenalfile of javadoc now applies to all command 
line args

Modified:
    ant/core/trunk/CONTRIBUTORS
    ant/core/trunk/WHATSNEW
    ant/core/trunk/contributors.xml
    ant/core/trunk/docs/manual/CoreTasks/javadoc.html
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java

Modified: ant/core/trunk/CONTRIBUTORS
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/CONTRIBUTORS?view=diff&rev=470134&r1=470133&r2=470134
==============================================================================
Binary files - no diff available.

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=470134&r1=470133&r2=470134
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Nov  1 15:19:33 2006
@@ -45,6 +45,9 @@
 
 * Diagnostics catches and logs security exceptions when accessing system 
properties.
 
+* <javadoc> useexternalfile now applies to all command line arguments
+  of javadoc. Bugzilla report 40852.
+
 
 Changes from Ant 1.7.0Beta2 to Ant 1.7.0Beta3
 =============================================

Modified: ant/core/trunk/contributors.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/contributors.xml?view=diff&rev=470134&r1=470133&r2=470134
==============================================================================
--- ant/core/trunk/contributors.xml (original)
+++ ant/core/trunk/contributors.xml Wed Nov  1 15:19:33 2006
@@ -189,6 +189,10 @@
   </name>
   <name>
     <first>Daniel</first>
+    <last>Ribagnac</last>
+  </name>
+  <name>
+    <first>Daniel</first>
     <last>Spilker</last>
   </name>
   <name>

Modified: ant/core/trunk/docs/manual/CoreTasks/javadoc.html
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/CoreTasks/javadoc.html?view=diff&rev=470134&r1=470133&r2=470134
==============================================================================
--- ant/core/trunk/docs/manual/CoreTasks/javadoc.html (original)
+++ ant/core/trunk/docs/manual/CoreTasks/javadoc.html Wed Nov  1 15:19:33 2006
@@ -413,7 +413,8 @@
       in srcfiles or as nested source elements should be written to a
       temporary file to make the command line shorter. Also applies to
       the package names specified via the packagenames attribute or
-      nested package elements.
+      nested package elements.<em>Since Ant 1.7.0</em>, also applies
+      to all the other command line options.
       (<code>yes</code> | <code>no</code>). Default is no.</td>
     <td align="center" valign="top">all</td>
     <td valign="top" align="center">No</td>

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=470134&r1=470133&r2=470134
==============================================================================
--- 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 Wed Nov  
1 15:19:33 2006
@@ -1966,9 +1966,14 @@
                     Project.MSG_WARN);
             }
         }
+        // If using an external file, write the command line options to it
+        if (useExternalFile && javadoc4) {
+            writeExternalArgs(toExecute);
+        }
 
         File tmpList = null;
         PrintWriter srcListWriter = null;
+
         try {
 
             /**
@@ -2072,6 +2077,92 @@
         }
     }
 
+    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);
+        }
+    }
+
+    /**
+     * Quote a string to place in a @ file.
+     * @param str the string to quote
+     * @return the quoted string, if there is no need to quote the string,
+     *         return the original string.
+     */
+    private String quoteString(String str) {
+        if (str.indexOf(' ') == -1
+            && str.indexOf('\'') == -1
+            && str.indexOf('"') == -1) {
+            return str;
+        }
+        if (str.indexOf('\'') == -1) {
+            return quoteString(str, '\'');
+        } else {
+            return quoteString(str, '"');
+        }
+    }
+
+    private String quoteString(String str, char delim) {
+        StringBuffer buf = new StringBuffer(str.length() * 2);
+        buf.append(delim);
+        if (str.indexOf('\\') != -1) {
+            str = replace(str, '\\', "\\\\");
+        }
+        if (str.indexOf(delim) != -1) {
+            str = replace(str, delim, "\\" + delim);
+        }
+        buf.append(str);
+        buf.append(delim);
+        return buf.toString();
+    }
+
+    private String replace(String str, char fromChar, String toString) {
+        StringBuffer buf = new StringBuffer(str.length() * 2);
+        for (int i = 0; i < str.length(); ++i) {
+            char ch = str.charAt(i);
+            if (ch == fromChar) {
+                buf.append(toString);
+            } else {
+                buf.append(ch);
+            }
+        }
+        return buf.toString();
+    }
+    
     /**
      * Add the files matched by the nested source files to the Vector
      * as SourceFile instances.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to