Author: dennisl Date: Sun Mar 4 07:31:15 2007 New Revision: 514409 URL: http://svn.apache.org/viewvc?view=rev&rev=514409 Log: [JXR-11] JXR does not handles multiple classes in one source file [JXR-14] JXR does not seem to handle inner classes properly
o Add the notion that a class belongs to a file. This is needed to handle multiple classes in one java file. These may be normal classes or inner classes. o Create links to javadocs and xref files based on the filename of a class. Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm maven/jxr/trunk/src/main/resources/templates/package-frame.vm maven/jxr/trunk/src/main/resources/templates/package-summary.vm Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java (original) +++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java Sun Mar 4 07:31:15 2007 @@ -365,6 +365,13 @@ String className = clazz.getName(); Map classInfo = new HashMap(); + if( clazz.getFilename() != null ) + { + classInfo.put( "filename", clazz.getFilename() ); + } + else { + classInfo.put( "filename", "" ); + } classInfo.put( "name", className ); classInfo.put( "dir", pkgDir ); Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java (original) +++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java Sun Mar 4 07:31:15 2007 @@ -289,9 +289,10 @@ try { JavaFile javaFile = fileManager.getFile( this.getCurrentFilename() ); - if ( javaFile.getClassType() != null ) + // Use the name of the file instead of the class to handle inner classes properly + if ( javaFile.getClassType() != null && javaFile.getClassType().getFilename() != null ) { - buffer.append( javaFile.getClassType().getName() ); + buffer.append( javaFile.getClassType().getFilename() ); } else { @@ -1101,9 +1102,10 @@ javadocURI.append( StringUtils.replace( jf.getPackageType().getName(), ".", "/" ) ); javadocURI.append( "/" ); - if ( jf.getClassType() != null ) + // Use the name of the file instead of the class to handle inner classes properly + if ( jf.getClassType() != null && jf.getClassType().getFilename() != null ) { - javadocURI.append( jf.getClassType().getName() ); + javadocURI.append( jf.getClassType().getFilename() ); } else { @@ -1293,11 +1295,11 @@ href.append( dest ); - //now append the classname.html file + // Now append filename.html if ( jc != null ) { href.append( "/" ); - href.append( jc.getName() ); + href.append( jc.getFilename() ); href.append( ".html" ); } Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java (original) +++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java Sun Mar 4 07:31:15 2007 @@ -20,15 +20,22 @@ */ /** - * Represents a Java class or interface + * Represents a Java class or interface. */ public class ClassType extends BaseType { + /** + * The name of the file that this class resides in, without path or + * extension. It might be different from the name of the class when dealing + * with inner classes. + */ + private String filename = null; /** - * Create a new ClassType + * Create a new ClassType without a filename. * + * @deprecated Please use [EMAIL PROTECTED] #ClassType( String, String )} instead * @param name */ public ClassType( String name ) @@ -36,4 +43,26 @@ this.setName( name ); } + /** + * Create a new ClassType. + * + * @param name + * @param filename + */ + public ClassType( String name , String filename) + { + this.setName( name ); + this.setFilename( filename ); + } + + + public String getFilename() + { + return filename; + } + + public void setFilename( String filename ) + { + this.filename = filename; + } } Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java (original) +++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java Sun Mar 4 07:31:15 2007 @@ -19,6 +19,8 @@ * under the License. */ +import java.util.ArrayList; +import java.util.List; import java.util.Vector; /** @@ -32,7 +34,7 @@ private Vector imports = new Vector(); - private ClassType classType = null; + private ArrayList classTypes = new ArrayList(); private PackageType packageType = new PackageType(); @@ -56,7 +58,23 @@ */ public ClassType getClassType() { - return this.classType; + if ( classTypes.isEmpty() ) + { + return null; + } + else + { + // To retain backward compatibility, return the first class + return (ClassType) this.classTypes.get( 0 ); + } + } + + /** + * Get the names of the classes in this file. + */ + public List getClassTypes() + { + return this.classTypes; } /** @@ -69,7 +87,15 @@ /** - * Add an ImportType to the current imports + * Add a ClassType to the current list of class types. + */ + public void addClassType( ClassType classType ) + { + this.classTypes.add( classType ); + } + + /** + * Add an ImportType to the current imports. */ public void addImportType( ImportType importType ) { @@ -81,7 +107,9 @@ */ public void setClassType( ClassType classType ) { - this.classType = classType; + // To retain backward compatibility, make sure the list contains only the supplied classType + this.classTypes.clear(); + this.classTypes.add( classType ); } /** Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java (original) +++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java Sun Mar 4 07:31:15 2007 @@ -19,6 +19,8 @@ * under the License. */ +import org.codehaus.plexus.util.StringUtils; + import java.io.File; import java.io.FileInputStream; import java.io.FileReader; @@ -111,14 +113,13 @@ this.addImportType( new ImportType( name ) ); } - //set the Class... if the class is found no more information is - //valid so just break out of the while loop at this point. - //set the imports + // Add the class or classes. There can be several classes in one file so + // continue with the while loop to get them all. if ( stok.sval.equals( "class" ) || stok.sval.equals( "interface" ) || stok.sval.equals( "enum" ) ) { stok.nextToken(); - this.setClassType( new ClassType( stok.sval ) ); - break; + this.addClassType( new ClassType( stok.sval, + getFilenameWithoutPathOrExtension( this.getFilename()) ) ); } } @@ -130,6 +131,36 @@ { this.reader.close(); } + } + } + + /** + * Remove the path and the ".java" extension from a filename. + */ + private static String getFilenameWithoutPathOrExtension( String filename ) + { + String newFilename; + // Remove the ".java" extension from the filename, if it exists + int extensionIndex = filename.lastIndexOf( ".java" ); + if ( extensionIndex == -1 ) + { + newFilename = filename; + } + else + { + newFilename = filename.substring( 0, extensionIndex ); + } + + // Remove the path, after unifying path separators + newFilename = StringUtils.replace( newFilename, "\\", "/" ); + int pathIndex = newFilename.lastIndexOf( "/" ); + if ( pathIndex == -1 ) + { + return newFilename; + } + else + { + return newFilename.substring( pathIndex + 1 ); } } Modified: maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java (original) +++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java Sun Mar 4 07:31:15 2007 @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.Enumeration; import java.util.Hashtable; +import java.util.Iterator; /** @@ -134,10 +135,13 @@ jp = jfi.getPackageType(); } - //add the current class to this global package. - if ( jfi.getClassType() != null && jfi.getClassType().getName() != null ) + // Add the current file's class(es) to this global package. + if ( jfi.getClassTypes() != null && !jfi.getClassTypes().isEmpty() ) { - jp.addClassType( jfi.getClassType() ); + for ( Iterator iterator = jfi.getClassTypes().iterator(); iterator.hasNext(); ) + { + jp.addClassType( (ClassType) iterator.next() ); + } } } Modified: maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm (original) +++ maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm Sun Mar 4 07:31:15 2007 @@ -32,7 +32,7 @@ <ul> #foreach ($classInfo in $info.allClasses.values()) <li> - <a href="${classInfo.dir}/${classInfo.name}.html" target="classFrame">$classInfo.name</a> + <a href="${classInfo.dir}/${classInfo.filename}.html" target="classFrame">$classInfo.name</a> </li> #end </ul> Modified: maven/jxr/trunk/src/main/resources/templates/package-frame.vm URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/resources/templates/package-frame.vm?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/resources/templates/package-frame.vm (original) +++ maven/jxr/trunk/src/main/resources/templates/package-frame.vm Sun Mar 4 07:31:15 2007 @@ -36,7 +36,7 @@ <ul> #foreach ($classInfo in $pkgInfo.classes.values()) <li> - <a href="${classInfo.name}.html" target="classFrame">$classInfo.name</a> + <a href="${classInfo.filename}.html" target="classFrame">$classInfo.name</a> </li> #end </ul> Modified: maven/jxr/trunk/src/main/resources/templates/package-summary.vm URL: http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/resources/templates/package-summary.vm?view=diff&rev=514409&r1=514408&r2=514409 ============================================================================== --- maven/jxr/trunk/src/main/resources/templates/package-summary.vm (original) +++ maven/jxr/trunk/src/main/resources/templates/package-summary.vm Sun Mar 4 07:31:15 2007 @@ -60,7 +60,7 @@ #foreach ($classInfo in $pkgInfo.classes.values()) <tr> <td> - <a href="${classInfo.name}.html" target="classFrame">$classInfo.name</a> + <a href="${classInfo.filename}.html" target="classFrame">$classInfo.name</a> </td> </tr> #end