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;
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() {
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;
}
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;
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();
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();
@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)
+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