You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mp...@apache.org on 2006/01/10 19:51:02 UTC

svn commit: r367728 - /maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java

Author: mperham
Date: Tue Jan 10 10:50:59 2006
New Revision: 367728

URL: http://svn.apache.org/viewcvs?rev=367728&view=rev
Log:
PR: MJAVADOC-9, MJAVADOC-19, MJAVADOC-27, MJAVADOC-21
Submitted by: David Jackman
Various fixes for javadoc parameter handling cases

Modified:
    maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java

Modified: maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java?rev=367728&r1=367727&r2=367728&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java Tue Jan 10 10:50:59 2006
@@ -16,6 +16,17 @@
  * limitations under the License.
  */
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.StringTokenizer;
+
 import org.apache.commons.lang.ClassUtils;
 import org.apache.commons.lang.SystemUtils;
 import org.apache.commons.lang.math.NumberUtils;
@@ -35,17 +46,6 @@
 import org.codehaus.plexus.util.cli.Commandline;
 import org.codehaus.plexus.util.cli.DefaultConsumer;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
 /**
  * Generates documentation for the Java code in the project using the standard
  * <a href="http://java.sun.com/j2se/javadoc/">Javadoc Tool</a> tool.
@@ -114,7 +114,8 @@
     // @see http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#options
 
     /**
-     * Set an additional parameter on the command line.
+     * Set an additional parameter(s) on the command line.  This value should include quotes as necessary for parameters
+     * that include spaces.
      *
      * @parameter expression="${additionalparam}"
      */
@@ -209,36 +210,20 @@
     private String overview;
 
     /**
-     * Shows only protected and public classes and members.
-     * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#package">package</a>.
-     *
-     * @parameter expression="${package}" default-value="true"
+     * Specifies the access level for classes and members to show in the Javadocs.
+     * Possible values are: 
+     * <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#public">public</a>
+     *      (shows only public classes and members),
+     * <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#protected">protected</a>
+     *      (shows only public and protected classes and members),
+     * <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#package">package</a>
+     *      (shows all classes and members not marked private), and
+     * <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#private">private</a>
+     *      (shows all classes and members).
+     * 
+     * @parameter expression="${show}" default-value="protected"
      */
-    private boolean showPackage = true;
-
-    /**
-     * Shows only protected and public classes and members.
-     * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#protected">protected</a>.
-     *
-     * @parameter expression="${protected}" default-value="false"
-     */
-    private boolean showProtected = false;
-
-    /**
-     * Shows all classes and members.
-     * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#private">private</a>
-     *
-     * @parameter expression="${private}" default-value="false"
-     */
-    private boolean showPrivate = false;
-
-    /**
-     * Shows only public classes and members.
-     * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#public">public</a>.
-     *
-     * @parameter expression="${public}" default-value="false"
-     */
-    private boolean public_ = false;
+    private String show = "protected";
 
     /**
      * Shuts off non-error and non-warning messages, leaving only the warnings and errors appear, making them easier to view.
@@ -652,18 +637,40 @@
             options.append( quotedPathArgument( classpath.toString() ) );
         }
 
+        char FILE_SEPARATOR = System.getProperty( "file.separator" ).charAt( 0 );
+        String[] excludePackages = {};
+        if ( excludePackageNames != null )
+        {
+            excludePackages = excludePackageNames.split( "[ ,:;]" );
+        }
+        for ( int i = 0; i < excludePackages.length; i++ )
+        {
+            excludePackages[i] = excludePackages[i].replace( '.', FILE_SEPARATOR );
+        }
+
         StringBuffer sourcePath = new StringBuffer();
         StringBuffer files = new StringBuffer();
         for ( Iterator i = getProject().getCompileSourceRoots().iterator(); i.hasNext(); )
         {
             String sourceDirectory = (String) i.next();
-            String[] fileList = FileUtils.getFilesFromExtension( sourceDirectory, new String[]{"java"} );
+            String[] fileList = FileUtils.getFilesFromExtension( sourceDirectory, new String[] { "java" } );
             if ( fileList != null && fileList.length != 0 )
             {
                 for ( int j = 0; j < fileList.length; j++ )
                 {
-                    files.append( quotedPathArgument( fileList[j] ) );
-                    files.append( "\n" );
+                    boolean include = true;
+                    for ( int k = 0; k < excludePackages.length && include; k++ )
+                    {
+                        if ( fileList[j].startsWith( sourceDirectory + FILE_SEPARATOR + excludePackages[k] ) )
+                        {
+                            include = false;
+                        }
+                    }
+                    if ( include )
+                    {
+                        files.append( quotedPathArgument( fileList[j] ) );
+                        files.append( "\n" );
+                    }
                 }
             }
 
@@ -681,7 +688,7 @@
         }
 
         File javadocDirectory = getReportOutputDirectory();
-               
+
         if ( !javadocDirectory.getAbsolutePath().equals( getOutputDirectory() ) )
         {
             // we're in site-embedded report mode, so Doxia has set the
@@ -723,8 +730,8 @@
             }
             else
             {
-                if ( ( NumberUtils.isDigits( maxmemory.substring( 0, maxmemory.length() - 1 ) ) ) &&
-                    ( maxmemory.toLowerCase().endsWith( "m" ) ) )
+                if ( ( NumberUtils.isDigits( maxmemory.substring( 0, maxmemory.length() - 1 ) ) )
+                    && ( maxmemory.toLowerCase().endsWith( "m" ) ) )
                 {
                     cmd.createArgument().setValue( "-J-Xmx" + maxmemory );
                 }
@@ -744,8 +751,8 @@
             }
             else
             {
-                if ( ( NumberUtils.isDigits( minmemory.substring( 0, minmemory.length() - 1 ) ) ) &&
-                    ( minmemory.toLowerCase().endsWith( "m" ) ) )
+                if ( ( NumberUtils.isDigits( minmemory.substring( 0, minmemory.length() - 1 ) ) )
+                    && ( minmemory.toLowerCase().endsWith( "m" ) ) )
                 {
                     cmd.createArgument().setValue( "-J-Xms" + minmemory );
                 }
@@ -771,7 +778,6 @@
         }
         addArgIfNotEmpty( arguments, "-encoding", quotedArgument( encoding ) );
         addArgIfNotEmpty( arguments, "-extdirs", quotedPathArgument( extdirs ) );
-        addArgIfNotEmpty( arguments, "-exclude", quotedArgument( excludePackageNames ), 1.4f );
 
         if ( old && SystemUtils.isJavaVersionAtLeast( 1.4f ) )
         {
@@ -782,22 +788,49 @@
             addArgIf( arguments, old, "-1.1" );
         }
 
-        addArgIfNotEmpty( arguments, "-overview", quotedArgument( overview ) );
-        addArgIf( arguments, showPackage, "-package" );
-        addArgIf( arguments, showPrivate, "-private" );
-        addArgIf( arguments, showProtected, "-protected" );
-        addArgIf( arguments, public_, "-public" );
+        final int LEVEL_PUBLIC = 1;
+        final int LEVEL_PROTECTED = 2;
+        final int LEVEL_PACKAGE = 3;
+        final int LEVEL_PRIVATE = 4;
+        int accessLevel = 0;
+        if ( "public".equalsIgnoreCase( show ) )
+        {
+            accessLevel = LEVEL_PUBLIC;
+        }
+        else if ( "protected".equalsIgnoreCase( show ) )
+        {
+            accessLevel = LEVEL_PROTECTED;
+        }
+        else if ( "package".equalsIgnoreCase( show ) )
+        {
+            accessLevel = LEVEL_PACKAGE;
+        }
+        else if ( "private".equalsIgnoreCase( show ) )
+        {
+            accessLevel = LEVEL_PRIVATE;
+        }
+        else
+        {
+            getLog().error( "Unrecognized access level to show '" + show + "'. Defaulting to protected." );
+            accessLevel = LEVEL_PROTECTED;
+        }
+
+        addArgIfNotEmpty( arguments, "-overview", quotedPathArgument( overview ) );
+        addArgIf( arguments, accessLevel == LEVEL_PUBLIC, "-public" );
+        addArgIf( arguments, accessLevel == LEVEL_PROTECTED, "-protected" );
+        addArgIf( arguments, accessLevel == LEVEL_PACKAGE, "-package" );
+        addArgIf( arguments, accessLevel == LEVEL_PRIVATE, "-private" );
         addArgIf( arguments, quiet, "-quiet", 1.4f );
         addArgIfNotEmpty( arguments, "-source", quotedArgument( source ), 1.4f );
         addArgIf( arguments, verbose, "-verbose" );
-        addArgIfNotEmpty( arguments, null, quotedArgument( additionalparam ) );
-        addArgIfNotEmpty( arguments, "-sourcePath", quotedPathArgument( sourcePath.toString() ) );
+        addArgIfNotEmpty( arguments, null, additionalparam );
+        addArgIfNotEmpty( arguments, "-sourcepath", quotedPathArgument( sourcePath.toString() ) );
 
         // javadoc arguments for default doclet
         if ( StringUtils.isEmpty( doclet ) )
         {
             bottom = StringUtils.replace( bottom, "{currentYear}", year );
-            if ( project.getInceptionYear() != null )
+            if ( project.getInceptionYear() != null && year.indexOf('-') == -1 )
             {
                 bottom = StringUtils.replace( bottom, "{inceptionYear}", project.getInceptionYear() );
             }
@@ -1062,7 +1095,7 @@
      * @see <a href="http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang/SystemUtils.html#isJavaVersionAtLeast(float)">SystemUtils.html#isJavaVersionAtLeast(float)</a>
      */
     private void addArgIfNotEmpty( List arguments, String key, String value, float requiredJavaVersion,
-                                   boolean repeatKey )
+                                  boolean repeatKey )
     {
         if ( SystemUtils.isJavaVersionAtLeast( requiredJavaVersion ) )
         {
@@ -1117,8 +1150,8 @@
             for ( int i = 0; i < offlineLinks.size(); i++ )
             {
                 OfflineLink offlineLink = (OfflineLink) offlineLinks.get( i );
-                addArgIfNotEmpty( arguments, "-linkoffline", quotedPathArgument( offlineLink.getUrl() ) + " " +
-                    quotedPathArgument( offlineLink.getLocation().getAbsolutePath() ), true );
+                addArgIfNotEmpty( arguments, "-linkoffline", quotedPathArgument( offlineLink.getUrl() ) + " "
+                    + quotedPathArgument( offlineLink.getLocation().getAbsolutePath() ), true );
             }
         }
     }