Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Sonar, open source software quality management tool.
   * Copyright (C) 2008-2012 SonarSource
   * mailto:contact AT sonarsource DOT com
   *
   * Sonar is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 3 of the License, or (at your option) any later version.
  *
  * Sonar is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with Sonar; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
  */
 package org.sonar.plugins.pmd;
 
 
 import java.io.*;
 import java.util.List;
 
 public class PmdExecutor implements BatchExtension {
 
   private static final Logger LOG = LoggerFactory.getLogger(PmdExecutor.class);
 
   private Project project;
 
   public PmdExecutor(Project projectPmdConfiguration configuration) {
     this. = project;
     this. = configuration;
   }
 
   public Report execute() throws IOExceptionPMDException {
     TimeProfiler profiler = new TimeProfiler().start("Execute PMD " + PmdVersion.getVersion());
 
     ClassLoader initialClassLoader = Thread.currentThread().getContextClassLoader();
     try {
       PMD pmd = new PMD();
       setJavaVersion(pmd);
       RuleContext ruleContext = new RuleContext();
       Report report = new Report();
       ruleContext.setReport(report);
 
       RuleSets rulesets = createRulesets();
 
       for (File file : .getFileSystem().getSourceFiles(.)) {
         ruleContext.setSourceCodeFilename(file.getAbsolutePath());
         Reader fileReader = new InputStreamReader(new FileInputStream(file), .getFileSystem().getSourceCharset());
         try {
           pmd.processFile(fileReaderrulesetsruleContext);
 
         } catch (PMDException e) {
           .error("Fail to execute PMD. Following file is ignored: " + filee.getCause());
 
         } catch (Exception e) {
           .error("Fail to execute PMD. Following file is ignored: " + filee);
 
         } finally {
           IOUtils.closeQuietly(fileReader);
         }
       }
 
       writeXmlReport(report);
 
       return report;
 
     } finally {
       profiler.stop();
       Thread.currentThread().setContextClassLoader(initialClassLoader);
     }
   }
 
   private RuleSets createRulesets() {
     RuleSets rulesets = new RuleSets();
     RuleSetFactory ruleSetFactory = new RuleSetFactory();
 
     List<StringrulesetPaths = .getRulesets();
     .info("PMD configuration: " + StringUtils.join(rulesetPaths", "));
 
    for (String rulesetPath : rulesetPaths) {
      InputStream rulesInput = openRuleset(rulesetPath);
      rulesets.addRuleSet(ruleSetFactory.createRuleSet(rulesInput));
      IOUtils.closeQuietly(rulesInput);
    }
    return rulesets;
  }
  private InputStream openRuleset(String rulesetPath) {
    try {
      File file = new File(rulesetPath);
      boolean found;
      if (file.exists()) {
        found = true;
      } else {
        file = new File(.getFileSystem().getBasedir(), rulesetPath);
        found = file.exists();
      }
      if (found) {
        return new FileInputStream(file);
      }
      InputStream stream = PmdExecutor.class.getResourceAsStream(rulesetPath);
      if (stream == null) {
        throw new SonarException("The PMD ruleset can not be found: " + rulesetPath);
      }
      return stream;
    } catch (FileNotFoundException e) {
      throw new SonarException("The PMD ruleset can not be found: " + rulesetPathe);
    }
  }
  private void writeXmlReport(Report reportthrows IOException {
    File xmlReport = .getTargetXMLReport();
    if (xmlReport != null) {
      Renderer xmlRenderer = new XMLRenderer();
      Writer stringwriter = new StringWriter();
      xmlRenderer.setWriter(stringwriter);
      xmlRenderer.start();
      xmlRenderer.renderFileReport(report);
      xmlRenderer.end();
      .info("PMD output report: " + xmlReport.getAbsolutePath());
      FileUtils.write(xmlReportstringwriter.toString());
    }
  }
  static String getNormalizedJavaVersion(String javaVersion) {
    if (StringUtils.equals("1.1"javaVersion) || StringUtils.equals("1.2"javaVersion)) {
      javaVersion = "1.3";
    } else if (StringUtils.equals("5"javaVersion)) {
      javaVersion = "1.5";
    } else if (StringUtils.equals("6"javaVersion)) {
      javaVersion = "1.6";
    }
    return javaVersion;
  }
  private void setJavaVersion(PMD pmdProject project) {
    String javaVersion = getNormalizedJavaVersion(JavaUtils.getSourceVersion(project));
    if (javaVersion != null) {
      SourceType sourceType = SourceType.getSourceTypeForId("java " + javaVersion);
      if (sourceType != null) {
        .info("Java version: " + javaVersion);
        pmd.setJavaVersion(sourceType);
      } else {
        throw new SonarException("Unsupported Java version for PMD: " + javaVersion);
      }
    }
  }
New to GrepCode? Check out our FAQ X