You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by dk...@apache.org on 2007/03/12 16:22:32 UTC
svn commit: r517246 - in
/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd:
CpdReport.java PmdReport.java
Author: dkulp
Date: Mon Mar 12 08:22:31 2007
New Revision: 517246
URL: http://svn.apache.org/viewvc?view=rev&rev=517246
Log:
Set contextClassLoader before running report to workaround ResourceManager issue
Modified:
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/PmdReport.java
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=517246&r1=517245&r2=517246
==============================================================================
--- 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 Mon Mar 12 08:22:31 2007
@@ -87,51 +87,62 @@
{
if ( !skip && canGenerateReport() )
{
- CPD cpd = new CPD( minimumTokens, new JavaLanguage() );
- Map files = null;
+ ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
try
{
- files = getFilesToProcess( );
- for ( Iterator it = files.keySet().iterator(); it.hasNext(); )
+ Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
+
+ CPD cpd = new CPD( minimumTokens, new JavaLanguage() );
+ Map files = null;
+ try
{
- cpd.add( (File) it.next() );
+ files = getFilesToProcess( );
+ for ( Iterator it = files.keySet().iterator(); it.hasNext(); )
+ {
+ cpd.add( (File) it.next() );
+ }
}
- }
- catch ( IOException e )
- {
- throw new MavenReportException( e.getMessage(), e );
- }
- cpd.go();
-
- CpdReportGenerator gen =
- new CpdReportGenerator( getSink(), files, getBundle( locale ), aggregate );
- gen.generate( cpd.getMatches() );
-
- if ( !isHtml() )
- {
- Renderer r = createRenderer();
- String buffer = r.render( cpd.getMatches() );
- try
+ catch ( IOException e )
{
- targetDirectory.mkdirs();
- Writer writer = new FileWriter( new File( targetDirectory, "cpd." + format ) );
- writer.write( buffer, 0, buffer.length() );
- writer.close();
-
-
- File siteDir = new File( targetDirectory, "site" );
- siteDir.mkdirs();
- writer = new FileWriter( new File( siteDir,
- "cpd." + format ) );
- writer.write( buffer, 0, buffer.length() );
- writer.close();
-
+ throw new MavenReportException( e.getMessage(), e );
}
- catch ( IOException ioe )
+ cpd.go();
+
+ CpdReportGenerator gen =
+ new CpdReportGenerator( getSink(), files, getBundle( locale ), aggregate );
+ gen.generate( cpd.getMatches() );
+
+ if ( !isHtml() )
{
- throw new MavenReportException( ioe.getMessage(), ioe );
+ Renderer r = createRenderer();
+ String buffer = r.render( cpd.getMatches() );
+ try
+ {
+ targetDirectory.mkdirs();
+ Writer writer = new FileWriter( new File( targetDirectory, "cpd." + format ) );
+ writer.write( buffer, 0, buffer.length() );
+ writer.close();
+
+
+ File siteDir = new File( targetDirectory, "site" );
+ siteDir.mkdirs();
+ writer = new FileWriter( new File( siteDir,
+ "cpd." + format ) );
+ writer.write( buffer, 0, buffer.length() );
+ writer.close();
+
+ }
+ catch ( IOException ioe )
+ {
+ throw new MavenReportException( ioe.getMessage(), ioe );
+ }
}
}
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( origLoader );
+ }
+
}
}
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=517246&r1=517245&r2=517246
==============================================================================
--- 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 Mon Mar 12 08:22:31 2007
@@ -134,151 +134,141 @@
{
if ( !skip && canGenerateReport() )
{
- Sink sink = getSink();
-
- PMD pmd = getPMD();
- RuleContext ruleContext = new RuleContext();
- Report report = new Report();
- PmdReportListener reportSink = new PmdReportListener( sink, getBundle( locale ), aggregate );
-
- report.addListener( reportSink );
- ruleContext.setReport( report );
- reportSink.beginDocument();
-
- RuleSetFactory ruleSetFactory = new RuleSetFactory();
- ruleSetFactory.setMinimumPriority( this.minimumPriority );
- RuleSet[] sets = new RuleSet[rulesets.length];
+ ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
try
{
- for ( int idx = 0; idx < rulesets.length; idx++ )
+ Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
+
+ Sink sink = getSink();
+
+ PMD pmd = getPMD();
+ RuleContext ruleContext = new RuleContext();
+ Report report = new Report();
+ PmdReportListener reportSink = new PmdReportListener( sink, getBundle( locale ), aggregate );
+
+ report.addListener( reportSink );
+ ruleContext.setReport( report );
+ reportSink.beginDocument();
+
+ RuleSetFactory ruleSetFactory = new RuleSetFactory();
+ ruleSetFactory.setMinimumPriority( this.minimumPriority );
+ RuleSet[] sets = new RuleSet[rulesets.length];
+ try
{
- String set = rulesets[idx];
- getLog().debug( "Preparing ruleset: " + set );
- File ruleset = null;
- Exception exception = null;
- try
+ for ( int idx = 0; idx < rulesets.length; idx++ )
{
+ String set = rulesets[idx];
+ getLog().debug( "Preparing ruleset: " + set );
+ File ruleset = null;
ruleset = locator.getResourceAsFile( set, getLocationTemp( set ) );
-
- }
- catch ( ResourceNotFoundException e )
- {
- exception = e;
- }
- catch ( FileResourceCreationException e )
- {
- exception = e;
+
+ if ( null == ruleset )
+ {
+ throw new MavenReportException( "Cold not resolve " + set );
+ }
+
+ InputStream rulesInput = new FileInputStream( ruleset );
+ sets[idx] = ruleSetFactory.createRuleSet( rulesInput );
}
- // workaround bug in resource manager when run in reporting mode
- // in reporting mode, the current classloader isn't in the ResourceManager.
- if (exception != null)
+ }
+ catch ( IOException e )
+ {
+ throw new MavenReportException( e.getMessage(), e );
+ }
+ catch ( ResourceNotFoundException e )
+ {
+ throw new MavenReportException( e.getMessage(), e );
+ }
+ catch ( FileResourceCreationException e )
+ {
+ throw new MavenReportException( e.getMessage(), e );
+ }
+
+ boolean hasEncoding = sourceEncoding != null;
+
+ Map files;
+ try
+ {
+ files = getFilesToProcess( );
+ }
+ catch ( IOException e )
+ {
+ throw new MavenReportException( "Can't get file list", e );
+ }
+
+ for ( Iterator i = files.entrySet().iterator(); i.hasNext(); )
+ {
+ Map.Entry entry = (Map.Entry) i.next();
+ File file = (File) entry.getKey();
+ PmdFileInfo fileInfo = (PmdFileInfo) entry.getValue();
+
+ // TODO: lazily call beginFile in case there are no rules
+
+ reportSink.beginFile( file , fileInfo );
+ ruleContext.setSourceCodeFilename( file.getAbsolutePath() );
+ for ( int idx = 0; idx < rulesets.length; idx++ )
{
- URL url = this.getClass().getClassLoader().getResource( set );
- if ( url != null )
+ try
{
- ruleset = new File( getLocationTemp( set ) );
- FileUtils.copyURLToFile( url, ruleset );
+ // PMD closes this Reader even though it did not open it so we have
+ // to open a new one with every call to processFile().
+ Reader reader = hasEncoding ? new InputStreamReader( new FileInputStream( file ),
+ sourceEncoding ) : new FileReader( file );
+ pmd.processFile( reader, sets[idx], ruleContext );
}
- else
+ catch ( UnsupportedEncodingException e1 )
{
- throw new MavenReportException( exception.getMessage(), exception );
+ throw new MavenReportException( "Encoding '" + sourceEncoding + "' is not supported.", e1 );
+ }
+ catch ( FileNotFoundException e2 )
+ {
+ getLog().warn( "Error opening source file: " + file );
+ reportSink.ruleViolationAdded(
+ new ProcessingErrorRuleViolation( file, e2.getLocalizedMessage() ) );
+ }
+ catch ( Exception e3 )
+ {
+ getLog().warn( "Failure executing PMD for: " + file, e3 );
+ reportSink.ruleViolationAdded(
+ new ProcessingErrorRuleViolation( file, e3.getLocalizedMessage() ) );
}
}
-
- if ( null == ruleset )
- {
- throw new MavenReportException( "Cold not resolve " + set );
- }
-
- InputStream rulesInput = new FileInputStream( ruleset );
- sets[idx] = ruleSetFactory.createRuleSet( rulesInput );
+ reportSink.endFile( file );
}
- }
- catch ( IOException e )
- {
- throw new MavenReportException( e.getMessage(), e );
- }
-
- boolean hasEncoding = sourceEncoding != null;
-
- Map files;
- try
- {
- files = getFilesToProcess( );
- }
- catch ( IOException e )
- {
- throw new MavenReportException( "Can't get file list", e );
- }
-
- for ( Iterator i = files.entrySet().iterator(); i.hasNext(); )
- {
- Map.Entry entry = (Map.Entry) i.next();
- File file = (File) entry.getKey();
- PmdFileInfo fileInfo = (PmdFileInfo) entry.getValue();
-
- // TODO: lazily call beginFile in case there are no rules
-
- reportSink.beginFile( file , fileInfo );
- ruleContext.setSourceCodeFilename( file.getAbsolutePath() );
- for ( int idx = 0; idx < rulesets.length; idx++ )
+
+ reportSink.endDocument();
+
+ if ( !isHtml() )
{
+ // Use the PMD renderers to render in any format aside from HTML.
+ Renderer r = createRenderer();
+ StringWriter stringwriter = new StringWriter();
+
try
{
- // PMD closes this Reader even though it did not open it so we have
- // to open a new one with every call to processFile().
- Reader reader = hasEncoding ? new InputStreamReader( new FileInputStream( file ),
- sourceEncoding ) : new FileReader( file );
- pmd.processFile( reader, sets[idx], ruleContext );
- }
- catch ( UnsupportedEncodingException e1 )
- {
- throw new MavenReportException( "Encoding '" + sourceEncoding + "' is not supported.", e1 );
+ r.render( stringwriter, report );
+ String buffer = stringwriter.toString();
+
+ Writer writer = new FileWriter( new File( targetDirectory, "pmd." + format ) );
+ writer.write( buffer, 0, buffer.length() );
+ writer.close();
+
+ File siteDir = new File( targetDirectory, "site" );
+ siteDir.mkdirs();
+ writer = new FileWriter( new File( siteDir,
+ "pmd." + format ) );
+ writer.write( buffer, 0, buffer.length() );
+ writer.close();
}
- catch ( FileNotFoundException e2 )
+ catch ( IOException ioe )
{
- getLog().warn( "Error opening source file: " + file );
- reportSink.ruleViolationAdded(
- new ProcessingErrorRuleViolation( file, e2.getLocalizedMessage() ) );
- }
- catch ( Exception e3 )
- {
- getLog().warn( "Failure executing PMD for: " + file, e3 );
- reportSink.ruleViolationAdded(
- new ProcessingErrorRuleViolation( file, e3.getLocalizedMessage() ) );
+ throw new MavenReportException( ioe.getMessage(), ioe );
}
}
- reportSink.endFile( file );
}
-
- reportSink.endDocument();
-
- if ( !isHtml() )
+ finally
{
- // Use the PMD renderers to render in any format aside from HTML.
- Renderer r = createRenderer();
- StringWriter stringwriter = new StringWriter();
-
- try
- {
- r.render( stringwriter, report );
- String buffer = stringwriter.toString();
-
- Writer writer = new FileWriter( new File( targetDirectory, "pmd." + format ) );
- writer.write( buffer, 0, buffer.length() );
- writer.close();
-
- File siteDir = new File( targetDirectory, "site" );
- siteDir.mkdirs();
- writer = new FileWriter( new File( siteDir,
- "pmd." + format ) );
- writer.write( buffer, 0, buffer.length() );
- writer.close();
- }
- catch ( IOException ioe )
- {
- throw new MavenReportException( ioe.getMessage(), ioe );
- }
+ Thread.currentThread().setContextClassLoader( origLoader );
}
}
}