From bc92061a8b012d08b8efb09b8e21b5ed114a5f59 Mon Sep 17 00:00:00 2001 From: Godin Date: Mon, 18 Oct 2010 16:09:19 +0000 Subject: [PATCH] SONAR-1772: * Add FindbugsVersion * Use sonar.findbugs.effort --- plugins/sonar-findbugs-plugin/pom.xml | 8 +++++ .../findbugs/FindbugsConfiguration.java | 28 +++++++++------ .../plugins/findbugs/FindbugsExecutor.java | 4 +-- .../plugins/findbugs/FindbugsVersion.java | 35 +++++++++++++++++++ .../findbugs/findbugs-plugin.properties | 1 + .../findbugs/FindbugsExecutorTest.java | 1 + 6 files changed, 65 insertions(+), 12 deletions(-) create mode 100644 plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsVersion.java create mode 100644 plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/findbugs-plugin.properties diff --git a/plugins/sonar-findbugs-plugin/pom.xml b/plugins/sonar-findbugs-plugin/pom.xml index 22c29a476a9..d9334950322 100644 --- a/plugins/sonar-findbugs-plugin/pom.xml +++ b/plugins/sonar-findbugs-plugin/pom.xml @@ -90,6 +90,13 @@ + + + src/main/resources + true + + + ${basedir}/src/main/resources @@ -98,6 +105,7 @@ ${basedir}/src/test/resources + org.codehaus.sonar diff --git a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java index fe0e05e6bf1..7969741cdb6 100644 --- a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java +++ b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java @@ -1,6 +1,8 @@ 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.profiles.RulesProfile; import org.sonar.api.resources.Project; import org.sonar.api.utils.SonarException; @@ -35,17 +37,19 @@ public class FindbugsConfiguration implements BatchExtension { } public edu.umd.cs.findbugs.Project getFindbugsProject() { - try { - edu.umd.cs.findbugs.Project findbugsProject = new edu.umd.cs.findbugs.Project(); - for (File dir : project.getFileSystem().getSourceDirs()) { - findbugsProject.addSourceDir(dir.getAbsolutePath()); - } - findbugsProject.addFile(project.getFileSystem().getBuildOutputDir().getAbsolutePath()); - findbugsProject.setCurrentWorkingDirectory(project.getFileSystem().getBuildDir()); - return findbugsProject; - } catch (Exception e) { - throw new SonarException(e); + File classesDir = project.getFileSystem().getBuildOutputDir(); + if (classesDir == null || !classesDir.exists()) { + throw new SonarException("Findbugs needs sources to be compiled. " + + "Please build project or edit pom.xml to set the property before executing sonar."); + } + + edu.umd.cs.findbugs.Project findbugsProject = new edu.umd.cs.findbugs.Project(); + for (File dir : project.getFileSystem().getSourceDirs()) { + findbugsProject.addSourceDir(dir.getAbsolutePath()); } + findbugsProject.addFile(classesDir.getAbsolutePath()); + findbugsProject.setCurrentWorkingDirectory(project.getFileSystem().getBuildDir()); + return findbugsProject; } public File saveIncludeConfigXml() throws IOException { @@ -64,4 +68,8 @@ public class FindbugsConfiguration implements BatchExtension { } return project.getFileSystem().writeToWorkingDirectory(findBugsFilter.toXml(), "findbugs-exclude.xml"); } + + public String getEffort() { + return StringUtils.lowerCase(project.getConfiguration().getString(CoreProperties.FINDBUGS_EFFORT_PROPERTY, CoreProperties.FINDBUGS_EFFORT_DEFAULT_VALUE)); + } } diff --git a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsExecutor.java b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsExecutor.java index d6465723b46..8953f013270 100644 --- a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsExecutor.java +++ b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsExecutor.java @@ -30,7 +30,7 @@ public class FindbugsExecutor implements BatchExtension { } public File execute() { - TimeProfiler profiler = new TimeProfiler().start("Execute Findbugs"); + TimeProfiler profiler = new TimeProfiler().start("Execute Findbugs " + FindbugsVersion.getVersion()); ClassLoader initialClassLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(FindBugs2.class.getClassLoader()); @@ -60,7 +60,7 @@ public class FindbugsExecutor implements BatchExtension { engine.setDetectorFactoryCollection(DetectorFactoryCollection.instance()); UserPreferences userPreferences = UserPreferences.createDefaultUserPreferences(); - userPreferences.setEffort(UserPreferences.EFFORT_DEFAULT); + userPreferences.setEffort(configuration.getEffort()); engine.addFilter(configuration.saveIncludeConfigXml().getAbsolutePath(), true); engine.addFilter(configuration.saveExcludeConfigXml().getAbsolutePath(), false); diff --git a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsVersion.java b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsVersion.java new file mode 100644 index 00000000000..8388c096b0d --- /dev/null +++ b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsVersion.java @@ -0,0 +1,35 @@ +package org.sonar.plugins.findbugs; + +import org.apache.commons.io.IOUtils; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public enum FindbugsVersion { + INSTANCE; + + private static final String PROPERTIES_PATH = "/org/sonar/plugins/findbugs/findbugs-plugin.properties"; + private String version; + + public static String getVersion() { + return INSTANCE.version; + } + + private FindbugsVersion() { + InputStream input = getClass().getResourceAsStream(PROPERTIES_PATH); + try { + Properties properties = new Properties(); + properties.load(input); + this.version = properties.getProperty("findbugs.version"); + + } catch (IOException e) { + LoggerFactory.getLogger(getClass()).warn("Can not load the Findbugs version from the file " + PROPERTIES_PATH); + this.version = ""; + + } finally { + IOUtils.closeQuietly(input); + } + } +} diff --git a/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/findbugs-plugin.properties b/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/findbugs-plugin.properties new file mode 100644 index 00000000000..a96dfab5e59 --- /dev/null +++ b/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/findbugs-plugin.properties @@ -0,0 +1 @@ +findbugs.version=${findbugs.version} \ No newline at end of file diff --git a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsExecutorTest.java b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsExecutorTest.java index cae79c1cf01..6d8801b985a 100644 --- a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsExecutorTest.java +++ b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsExecutorTest.java @@ -36,6 +36,7 @@ public class FindbugsExecutorTest { 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.getEffort()).thenReturn("default"); return conf; } -- 2.39.5