]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1772:
authorGodin <mandrikov@gmail.com>
Tue, 19 Oct 2010 10:35:16 +0000 (10:35 +0000)
committerGodin <mandrikov@gmail.com>
Tue, 19 Oct 2010 10:35:16 +0000 (10:35 +0000)
* Provide aux classpath for findbugs
* Produce xml report with messages

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/test/java/org/sonar/plugins/findbugs/FindbugsExecutorTest.java
plugins/sonar-findbugs-plugin/test-resources/classes/Hello$1.class [new file with mode: 0644]
plugins/sonar-findbugs-plugin/test-resources/classes/Hello.class
plugins/sonar-findbugs-plugin/test-resources/src/Hello.java

index 7d0510c685533733d15d51c7e1860e2bfc4280c0..5541701a6e16d7ceceaeaf794ae240d46facfc99 100644 (file)
@@ -3,6 +3,7 @@ package org.sonar.plugins.findbugs;
 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.profiles.RulesProfile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.utils.SonarException;
@@ -22,11 +23,13 @@ public class FindbugsConfiguration implements BatchExtension {
   private Project project;
   private RulesProfile profile;
   private FindbugsProfileExporter exporter;
+  private ProjectClasspath projectClasspath;
 
-  public FindbugsConfiguration(Project project, RulesProfile profile, FindbugsProfileExporter exporter) {
+  public FindbugsConfiguration(Project project, RulesProfile profile, FindbugsProfileExporter exporter, ProjectClasspath classpath) {
     this.project = project;
     this.profile = profile;
     this.exporter = exporter;
+    this.projectClasspath = classpath;
   }
 
   public File getTargetXMLReport() {
@@ -48,6 +51,11 @@ public class FindbugsConfiguration implements BatchExtension {
       findbugsProject.addSourceDir(dir.getAbsolutePath());
     }
     findbugsProject.addFile(classesDir.getAbsolutePath());
+    for (File file : projectClasspath.getElements()) {
+      if ( !file.equals(classesDir)) {
+        findbugsProject.addAuxClasspathEntry(file.getAbsolutePath());
+      }
+    }
     findbugsProject.setCurrentWorkingDirectory(project.getFileSystem().getBuildDir());
     return findbugsProject;
   }
index cc9cc188b3e5b925e4309c3dcd8faedc19adfc96..99a980a1899578ba35000479936776a5927562d7 100644 (file)
@@ -10,7 +10,6 @@ import org.sonar.api.utils.SonarException;
 import org.sonar.api.utils.TimeProfiler;
 
 import edu.umd.cs.findbugs.*;
-import edu.umd.cs.findbugs.annotations.Priority;
 import edu.umd.cs.findbugs.config.UserPreferences;
 
 import java.io.File;
@@ -45,7 +44,8 @@ public class FindbugsExecutor implements BatchExtension {
       engine.setProject(project);
 
       XMLBugReporter xmlBugReporter = new XMLBugReporter(project);
-      xmlBugReporter.setPriorityThreshold(Priority.LOW.getPriorityValue());
+      xmlBugReporter.setPriorityThreshold(Detector.LOW_PRIORITY);
+      xmlBugReporter.setAddMessages(true);
       // xmlBugReporter.setErrorVerbosity(BugReporter.SILENT);
 
       File xmlReport = configuration.getTargetXMLReport();
@@ -59,16 +59,14 @@ public class FindbugsExecutor implements BatchExtension {
 
       engine.setBugReporter(xmlBugReporter);
 
-      engine.setProject(project);
-
-      engine.setDetectorFactoryCollection(DetectorFactoryCollection.instance());
       UserPreferences userPreferences = UserPreferences.createDefaultUserPreferences();
       userPreferences.setEffort(configuration.getEffort());
+      engine.setUserPreferences(userPreferences);
 
       engine.addFilter(configuration.saveIncludeConfigXml().getAbsolutePath(), true);
       engine.addFilter(configuration.saveExcludeConfigXml().getAbsolutePath(), false);
 
-      engine.setUserPreferences(userPreferences);
+      engine.setDetectorFactoryCollection(DetectorFactoryCollection.instance());
       engine.setAnalysisFeatureSettings(FindBugs.DEFAULT_EFFORT);
 
       engine.finishSettings();
index 3061414b21b15ee066f562a3c512d997c801a397..ce41df5002b8d07a916e4b32540d7784fc95c778 100644 (file)
@@ -19,13 +19,16 @@ public class FindbugsExecutorTest {
   @Test
   public void canGenerateXMLReport() throws Exception {
     FindbugsConfiguration conf = mockConf();
-    File report = new File("target/test-tmp/findbugs-report.xml");
-    when(conf.getTargetXMLReport()).thenReturn(report);
+    File reportFile = new File("target/test-tmp/findbugs-report.xml");
+    when(conf.getTargetXMLReport()).thenReturn(reportFile);
 
     new FindbugsExecutor(conf).execute();
 
-    assertThat(report.exists(), is(true));
-    assertThat(FileUtils.readFileToString(report), containsString("<BugInstance"));
+    assertThat(reportFile.exists(), is(true));
+    String report = FileUtils.readFileToString(reportFile);
+    assertThat("Report should contain bug instance", report, containsString("<BugInstance"));
+    assertThat("Report should be generated with messages", report, containsString("<Message>"));
+    assertThat(report, containsString("synthetic=\"true\""));
   }
 
   @Test(expected = SonarException.class)
diff --git a/plugins/sonar-findbugs-plugin/test-resources/classes/Hello$1.class b/plugins/sonar-findbugs-plugin/test-resources/classes/Hello$1.class
new file mode 100644 (file)
index 0000000..7e0dca8
Binary files /dev/null and b/plugins/sonar-findbugs-plugin/test-resources/classes/Hello$1.class differ
index 45f085b02d879761dd2b8ebd25de9de7bf45b0a3..f36889d4527720d3b85464254bbbfe41d25599d9 100644 (file)
Binary files a/plugins/sonar-findbugs-plugin/test-resources/classes/Hello.class and b/plugins/sonar-findbugs-plugin/test-resources/classes/Hello.class differ
index 5bb582c725415281ef65c7d66147f791a1666b0c..1fc7ebcdc3ec60978789452c3f13a9831551af62 100644 (file)
@@ -1,9 +1,18 @@
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+
 class Hello {
 
   static String name;
   
   public void methodWithViolations(String n) {
     name = n;
+    Collections.sort(Arrays.asList(new Integer[]{1, 2, 3}), new Comparator<Integer>() {
+      public int compare(Integer o1, Integer o2) {
+        return o1 - o2;
+      }
+    });
   }
   
   @Override