]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1772: Use existing rules config
authorGodin <mandrikov@gmail.com>
Wed, 20 Oct 2010 23:25:14 +0000 (23:25 +0000)
committerGodin <mandrikov@gmail.com>
Wed, 20 Oct 2010 23:25:14 +0000 (23:25 +0000)
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsExecutor.java
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsNativeSensor.java
plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsExecutorTest.java

index 5541701a6e16d7ceceaeaf794ae240d46facfc99..84c3f49364ded83a6c2bb9f77c75bbadd781b64b 100644 (file)
@@ -4,8 +4,11 @@ import org.apache.commons.lang.StringUtils;
 import org.sonar.api.BatchExtension;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.ProjectClasspath;
+import org.sonar.api.batch.maven.MavenPlugin;
+import org.sonar.api.batch.maven.MavenUtils;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.resources.Project;
+import org.sonar.api.utils.Logs;
 import org.sonar.api.utils.SonarException;
 import org.sonar.plugins.findbugs.xml.ClassFilter;
 import org.sonar.plugins.findbugs.xml.FindBugsFilter;
@@ -40,6 +43,10 @@ public class FindbugsConfiguration implements BatchExtension {
   }
 
   public edu.umd.cs.findbugs.Project getFindbugsProject() {
+    if (project.getReuseExistingRulesConfig()) {
+      Logs.INFO.warn("Reusing existing Findbugs configuration is deprecated as it's unstable and can not provide meaningful results. This feature will be removed soon.");
+    }
+
     File classesDir = project.getFileSystem().getBuildOutputDir();
     if (classesDir == null || !classesDir.exists()) {
       throw new SonarException("Findbugs needs sources to be compiled. "
@@ -60,13 +67,23 @@ public class FindbugsConfiguration implements BatchExtension {
     return findbugsProject;
   }
 
-  public File saveIncludeConfigXml() throws IOException {
+  private MavenPlugin getFindbugsMavenPlugin() {
+    return MavenPlugin.getPlugin(project.getPom(), MavenUtils.GROUP_ID_CODEHAUS_MOJO, "findbugs-maven-plugin");
+  }
+
+  public String saveIncludeConfigXml() throws IOException {
+    if (project.getReuseExistingRulesConfig()) {
+      return getFindbugsMavenPlugin().getParameter("includeFilterFile");
+    }
     StringWriter conf = new StringWriter();
     exporter.exportProfile(profile, conf);
-    return project.getFileSystem().writeToWorkingDirectory(conf.toString(), "findbugs-include.xml");
+    return project.getFileSystem().writeToWorkingDirectory(conf.toString(), "findbugs-include.xml").getAbsolutePath();
   }
 
-  public File saveExcludeConfigXml() throws IOException {
+  public String saveExcludeConfigXml() throws IOException {
+    if (project.getReuseExistingRulesConfig()) {
+      return getFindbugsMavenPlugin().getParameter("excludeFilterFile");
+    }
     FindBugsFilter findBugsFilter = new FindBugsFilter();
     if (project.getExclusionPatterns() != null) {
       for (String exclusion : project.getExclusionPatterns()) {
@@ -74,7 +91,7 @@ public class FindbugsConfiguration implements BatchExtension {
         findBugsFilter.addMatch(new Match(classFilter));
       }
     }
-    return project.getFileSystem().writeToWorkingDirectory(findBugsFilter.toXml(), "findbugs-exclude.xml");
+    return project.getFileSystem().writeToWorkingDirectory(findBugsFilter.toXml(), "findbugs-exclude.xml").getAbsolutePath();
   }
 
   public String getEffort() {
index 99a980a1899578ba35000479936776a5927562d7..e182f2d3ebb54cd314fc5d38b444eef673d6ff0e 100644 (file)
@@ -9,7 +9,12 @@ import org.sonar.api.BatchExtension;
 import org.sonar.api.utils.SonarException;
 import org.sonar.api.utils.TimeProfiler;
 
-import edu.umd.cs.findbugs.*;
+import edu.umd.cs.findbugs.Detector;
+import edu.umd.cs.findbugs.DetectorFactoryCollection;
+import edu.umd.cs.findbugs.FindBugs;
+import edu.umd.cs.findbugs.FindBugs2;
+import edu.umd.cs.findbugs.Project;
+import edu.umd.cs.findbugs.XMLBugReporter;
 import edu.umd.cs.findbugs.config.UserPreferences;
 
 import java.io.File;
@@ -63,8 +68,8 @@ public class FindbugsExecutor implements BatchExtension {
       userPreferences.setEffort(configuration.getEffort());
       engine.setUserPreferences(userPreferences);
 
-      engine.addFilter(configuration.saveIncludeConfigXml().getAbsolutePath(), true);
-      engine.addFilter(configuration.saveExcludeConfigXml().getAbsolutePath(), false);
+      engine.addFilter(configuration.saveIncludeConfigXml(), true);
+      engine.addFilter(configuration.saveExcludeConfigXml(), false);
 
       engine.setDetectorFactoryCollection(DetectorFactoryCollection.instance());
       engine.setAnalysisFeatureSettings(FindBugs.DEFAULT_EFFORT);
@@ -72,8 +77,8 @@ public class FindbugsExecutor implements BatchExtension {
       engine.finishSettings();
 
       Executors.newSingleThreadExecutor()
-        .submit(new FindbugsTask(engine))
-        .get(configuration.getTimeout(), TimeUnit.MILLISECONDS);
+          .submit(new FindbugsTask(engine))
+          .get(configuration.getTimeout(), TimeUnit.MILLISECONDS);
 
       profiler.stop();
       return xmlReport;
index 6bf24b8f0e94e238d643d6ab7bec87c0f50ffc49..08e9dcc865ee2fe00ea6299973a23962b785d30a 100644 (file)
@@ -33,7 +33,7 @@ public class FindbugsNativeSensor implements Sensor {
 
   public boolean shouldExecuteOnProject(Project project) {
     return project.getFileSystem().hasJavaSourceFiles()
-        && !profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY).isEmpty()
+        && ( !profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY).isEmpty() || project.getReuseExistingRulesConfig())
         && project.getPom() != null && !StringUtils.equalsIgnoreCase(project.getPom().getPackaging(), "ear");
   }
 
index ce41df5002b8d07a916e4b32540d7784fc95c778..d4e9706dc34febc203693df40ce9289fb90da020 100644 (file)
@@ -1,5 +1,11 @@
 package org.sonar.plugins.findbugs;
 
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.internal.matchers.StringContains.containsString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 import org.apache.commons.io.FileUtils;
 import org.junit.Test;
 import org.sonar.api.utils.SonarException;
@@ -8,12 +14,6 @@ import edu.umd.cs.findbugs.Project;
 
 import java.io.File;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.internal.matchers.StringContains.containsString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
 public class FindbugsExecutorTest {
 
   @Test
@@ -46,8 +46,8 @@ public class FindbugsExecutorTest {
     project.addSourceDir(new File("test-resources/src").getCanonicalPath());
     project.setCurrentWorkingDirectory(new File("test-resources"));
     when(conf.getFindbugsProject()).thenReturn(project);
-    when(conf.saveExcludeConfigXml()).thenReturn(new File("test-resources/findbugs-exclude.xml"));
-    when(conf.saveIncludeConfigXml()).thenReturn(new File("test-resources/findbugs-include.xml"));
+    when(conf.saveExcludeConfigXml()).thenReturn(new File("test-resources/findbugs-exclude.xml").getAbsolutePath());
+    when(conf.saveIncludeConfigXml()).thenReturn(new File("test-resources/findbugs-include.xml").getAbsolutePath());
     when(conf.getEffort()).thenReturn("default");
     when(conf.getTimeout()).thenReturn(FindbugsConstants.FINDBUGS_TIMEOUT_DEFAULT_VALUE);
     return conf;