Author: dkulp Date: Sun Mar 11 08:09:45 2007 New Revision: 516919 URL: http://svn.apache.org/viewvc?view=rev&rev=516919 Log: MPMD-28 Cleanup aggregate mode. Add project names to html output.
Added: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java (with props) Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java maven/plugins/trunk/maven-pmd-plugin/src/main/resources/cpd-report.properties Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java?view=diff&rev=516919&r1=516918&r2=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java (original) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java Sun Mar 11 08:09:45 2007 @@ -271,21 +271,43 @@ } } - List directories = new ArrayList(compileSourceRoots); - List testdirectories = new ArrayList(); + List directories = new ArrayList(); + + for ( Iterator i = compileSourceRoots.iterator(); i.hasNext(); ) + { + String root = (String) i.next(); + File sroot = new File(root); + directories.add( new PmdFileInfo( project, sroot, sourceXref) ); + } + if ( includeTests ) { - testdirectories.addAll(testSourceRoots); + for ( Iterator i = testSourceRoots.iterator(); i.hasNext(); ) + { + String root = (String) i.next(); + File sroot = new File(root); + directories.add( new PmdFileInfo( project, sroot, testXref) ); + } } if ( aggregate ) { for ( Iterator i = reactorProjects.iterator(); i.hasNext(); ) { MavenProject localProject = (MavenProject) i.next(); - directories.addAll(localProject.getCompileSourceRoots()); + for ( Iterator i2 = localProject.getCompileSourceRoots().iterator(); i2.hasNext(); ) + { + String root = (String) i2.next(); + File sroot = new File(root); + directories.add( new PmdFileInfo( localProject, sroot, sourceXref) ); + } if ( includeTests ) { - testdirectories.addAll(localProject.getTestCompileSourceRoots()); + for ( Iterator i2 = localProject.getTestCompileSourceRoots().iterator(); i2.hasNext(); ) + { + String root = (String) i2.next(); + File sroot = new File(root); + directories.add( new PmdFileInfo( localProject, sroot, testXref) ); + } } } @@ -318,8 +340,8 @@ for ( Iterator it = directories.iterator(); it.hasNext();) { - String root = (String)it.next(); - File sourceDirectory = new File(root); + PmdFileInfo finfo = (PmdFileInfo) it.next(); + File sourceDirectory = finfo.getSourceDirectory(); if ( sourceDirectory.exists() && sourceDirectory.isDirectory() && !excludeRootFiles.contains(sourceDirectory)) @@ -327,25 +349,11 @@ List newfiles = FileUtils.getFiles( sourceDirectory, including, excludesStr.toString() ); for ( Iterator it2 = newfiles.iterator(); it2.hasNext(); ) { - files.put( it2.next(), new Object[] { sourceDirectory , sourceXref }); - } - } - } - for ( Iterator it = testdirectories.iterator(); it.hasNext();) - { - String root = (String)it.next(); - File testDirectory = new File(root); - if ( testDirectory.exists() - && testDirectory.isDirectory() - && !excludeRootFiles.contains(testDirectory)) - { - List newfiles = FileUtils.getFiles( testDirectory, including, excludesStr.toString() ); - for ( Iterator it2 = newfiles.iterator(); it2.hasNext(); ) - { - files.put( it2.next(), new Object[] { testDirectory , testXref }); + files.put( it2.next(), finfo); } } } + return files; } Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java?view=diff&rev=516919&r1=516918&r2=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java (original) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java Sun Mar 11 08:09:45 2007 @@ -106,7 +106,7 @@ cpd.go(); CpdReportGenerator gen = - new CpdReportGenerator( getSink(), files, getBundle( locale ) ); + new CpdReportGenerator( getSink(), files, getBundle( locale ), aggregate ); gen.generate( cpd.getMatches() ); if ( !isHtml() ) Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java?view=diff&rev=516919&r1=516918&r2=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java (original) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java Sun Mar 11 08:09:45 2007 @@ -27,6 +27,7 @@ import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.cpd.Match; +import org.apache.maven.project.MavenProject; import org.codehaus.doxia.sink.Sink; import org.codehaus.plexus.util.StringUtils; @@ -43,12 +44,15 @@ private Map fileMap; private ResourceBundle bundle; + + private boolean aggregate; - public CpdReportGenerator( Sink sink, Map fileMap, ResourceBundle bundle ) + public CpdReportGenerator( Sink sink, Map fileMap, ResourceBundle bundle, boolean aggregate ) { this.sink = sink; this.fileMap = fileMap; this.bundle = bundle; + this.aggregate = aggregate; } /** @@ -118,18 +122,20 @@ String filename1 = match.getFirstMark().getTokenSrcID(); File file = new File( filename1 ); - Object fileInfo[] = (Object[]) fileMap.get( file ); - File sourceDirectory = (File) fileInfo[0]; - String xrefLocation = (String) fileInfo[1]; + PmdFileInfo fileInfo = (PmdFileInfo) fileMap.get( file ); + File sourceDirectory = fileInfo.getSourceDirectory(); + String xrefLocation = fileInfo.getXrefLocation(); + MavenProject projectFile1 = fileInfo.getProject(); filename1 = StringUtils.substring( filename1, sourceDirectory.getAbsolutePath().length() + 1 ); String filename2 = match.getSecondMark().getTokenSrcID(); file = new File( filename2 ); - fileInfo = (Object[]) fileMap.get( file ); - sourceDirectory = (File) fileInfo[0]; - String xrefLocation2 = (String) fileInfo[1]; + fileInfo = (PmdFileInfo) fileMap.get( file ); + sourceDirectory = fileInfo.getSourceDirectory(); + String xrefLocation2 = fileInfo.getXrefLocation(); filename2 = StringUtils.substring( filename2, sourceDirectory.getAbsolutePath().length() + 1 ); + MavenProject projectFile2 = fileInfo.getProject(); String code = match.getSourceCodeSlice(); int line1 = match.getFirstMark().getBeginLine(); @@ -141,6 +147,12 @@ sink.tableHeaderCell(); sink.text( bundle.getString( "report.cpd.column.file" ) ); sink.tableHeaderCell_(); + if ( aggregate ) + { + sink.tableHeaderCell(); + sink.text( bundle.getString( "report.cpd.column.project" ) ); + sink.tableHeaderCell_(); + } sink.tableHeaderCell(); sink.text( bundle.getString( "report.cpd.column.line" ) ); sink.tableHeaderCell_(); @@ -151,6 +163,12 @@ sink.tableCell(); sink.text( filename1 ); sink.tableCell_(); + if ( aggregate ) + { + sink.tableCell(); + sink.text( projectFile1.getName() ); + sink.tableCell_(); + } sink.tableCell(); if ( xrefLocation != null ) @@ -172,7 +190,16 @@ sink.tableCell(); sink.text( filename2 ); sink.tableCell_(); + if ( aggregate ) + { + sink.tableCell(); + sink.text( projectFile2.getName() ); + sink.tableCell_(); + } sink.tableCell(); + + + if ( xrefLocation != null ) { sink.link( xrefLocation2 + "/" + filename2.replaceAll( "\\.java$", ".html" ).replace( '\\', '/' ) + "#" + @@ -189,8 +216,13 @@ // Source snippet sink.tableRow(); + + int colspan = 2; + if ( aggregate ) { + colspan = 3; + } // TODO Cleaner way to do this? - sink.rawText( "<td colspan='2'>" ); + sink.rawText( "<td colspan='" + colspan + "'>" ); sink.verbatim( false ); sink.text( code ); sink.verbatim_(); Added: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java?view=auto&rev=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java (added) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java Sun Mar 11 08:09:45 2007 @@ -0,0 +1,40 @@ +package org.apache.maven.plugin.pmd; + +import java.io.File; + +import org.apache.maven.project.MavenProject; + +public class PmdFileInfo { + + MavenProject project; + File sourceDir; + String xref; + + + public PmdFileInfo(MavenProject project, + File dir, + String x) + { + this.project = project; + this.sourceDir = dir; + this.xref = x; + } + + + public String getXrefLocation() + { + return xref; + } + + public File getSourceDirectory() + { + return sourceDir; + } + + public MavenProject getProject() + { + return project; + } + + +} Propchange: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdFileInfo.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java?view=diff&rev=516919&r1=516918&r2=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java (original) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java Sun Mar 11 08:09:45 2007 @@ -138,7 +138,7 @@ RuleContext ruleContext = new RuleContext(); Report report = new Report(); // TODO: use source roots instead - PmdReportListener reportSink = new PmdReportListener( sink, getBundle( locale ) ); + PmdReportListener reportSink = new PmdReportListener( sink, getBundle( locale ), aggregate ); report.addListener( reportSink ); ruleContext.setReport( report ); @@ -193,14 +193,12 @@ { Map.Entry entry = (Map.Entry) i.next(); File file = (File) entry.getKey(); - Object fileInfo[] = (Object[]) entry.getValue(); - File sourceDir = (File) fileInfo[0]; - String xrefLoc = (String) fileInfo[1]; + PmdFileInfo fileInfo = (PmdFileInfo) entry.getValue(); + File sourceDir = fileInfo.getSourceDirectory(); // TODO: lazily call beginFile in case there are no rules - reportSink.beginFile( file , sourceDir ); - reportSink.setXrefLocation( xrefLoc ); + reportSink.beginFile( file , fileInfo ); ruleContext.setSourceCodeFilename( file.getAbsolutePath() ); for ( int idx = 0; idx < rulesets.length; idx++ ) { Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java?view=diff&rev=516919&r1=516918&r2=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java (original) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java Sun Mar 11 08:09:45 2007 @@ -52,19 +52,22 @@ private ResourceBundle bundle; - private String xrefLocation; + private PmdFileInfo fileInfo; private List violations = new ArrayList(); + private boolean aggregate; + // The number of erroneous files private int fileCount = 0; //private List metrics = new ArrayList(); - public PmdReportListener( Sink sink, ResourceBundle bundle ) + public PmdReportListener( Sink sink, ResourceBundle bundle, boolean aggregate ) { this.sink = sink; this.bundle = bundle; + this.aggregate = aggregate; } private String getTitle() @@ -78,7 +81,12 @@ { sink.section2(); sink.sectionTitle2(); - sink.text( currentFilename ); + String title = currentFilename; + if ( aggregate ) + { + title = fileInfo.getProject().getName() + " - " + currentFilename; + } + sink.text( title ); sink.sectionTitle2_(); sink.table(); @@ -137,6 +145,7 @@ private void outputLineLink( int line ) { + String xrefLocation = fileInfo.getXrefLocation(); if ( xrefLocation != null ) { sink.link( xrefLocation + "/" + currentFilename.replaceAll( "\\.java$", ".html" ) + "#" + line ); @@ -191,9 +200,11 @@ // TODO files summary } - public void beginFile( File file, File sourceDir ) + public void beginFile( File file, PmdFileInfo finfo ) { - currentFilename = StringUtils.substring( file.getAbsolutePath(), sourceDir.getAbsolutePath().length() + 1 ); + fileInfo = finfo; + currentFilename = StringUtils.substring( file.getAbsolutePath(), + finfo.getSourceDirectory().getAbsolutePath().length() + 1 ); currentFilename = StringUtils.replace( currentFilename, "\\", "/" ); fileInitialized = false; } @@ -289,13 +300,4 @@ sink.close(); } - public String getXrefLocation() - { - return xrefLocation; - } - - public void setXrefLocation( String xrefLocation ) - { - this.xrefLocation = xrefLocation; - } } Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/resources/cpd-report.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/resources/cpd-report.properties?view=diff&rev=516919&r1=516918&r2=516919 ============================================================================== --- maven/plugins/trunk/maven-pmd-plugin/src/main/resources/cpd-report.properties (original) +++ maven/plugins/trunk/maven-pmd-plugin/src/main/resources/cpd-report.properties Sun Mar 11 08:09:45 2007 @@ -19,6 +19,7 @@ report.cpd.description=Duplicate code detection. report.cpd.title=CPD Results report.cpd.column.file=File +report.cpd.column.project=Project report.cpd.column.line=Line report.cpd.cpdlink=The following document contains the results of PMD's report.cpd.dupes=Duplications