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 );
             }
         }
     }