diff --git a/src/main/scala/de/johoop/findbugs4sbt/CommandLine.scala b/src/main/scala/de/johoop/findbugs4sbt/CommandLine.scala index 2ded8b3..3fa5766 100644 --- a/src/main/scala/de/johoop/findbugs4sbt/CommandLine.scala +++ b/src/main/scala/de/johoop/findbugs4sbt/CommandLine.scala @@ -14,9 +14,10 @@ package de.johoop.findbugs4sbt import sbt._ import sbt.Keys._ +import scala.io.Source import scala.xml.Node -import java.io.File +import java.io.{PrintWriter, File} import ReportType._ import Priority._ @@ -24,7 +25,7 @@ import Effort._ private[findbugs4sbt] trait CommandLine extends Plugin with Filters with Settings { - def commandLine(findbugsClasspath: Classpath, compileClasspath: Classpath, + def commandLine(findbugsPluginList: Seq[String], findbugsClasspath: Classpath, compileClasspath: Classpath, paths: PathSettings, filters: FilterSettings, filterPath: File, misc: MiscSettings, streams: TaskStreams) = { def findbugsCommandLine = findbugsJavaCall ++ findbugsCallOptions ++ findbugsCallArguments @@ -32,13 +33,13 @@ private[findbugs4sbt] trait CommandLine extends Plugin with Filters with Setting def findbugsJavaCall = { val classpath = commandLineClasspath(findbugsClasspath.files) streams.log.debug("FindBugs classpath: %s" format classpath) - + List("-Xmx%dm".format(misc.maxMemory), "-cp", classpath, "edu.umd.cs.findbugs.LaunchAppropriateUI", "-textui") } def findbugsCallArguments = paths.analyzedPath map (_.getPath) - + def findbugsCallOptions = { if (paths.reportPath.isDefined && ! misc.reportType.isDefined) sys.error("If a report path is defined, a report type is required!") @@ -50,7 +51,8 @@ private[findbugs4sbt] trait CommandLine extends Plugin with Filters with Setting paths.reportPath.map(path => List("-output", path.absolutePath)).getOrElse(Nil) ++ List( "-nested:%b".format(misc.analyzeNestedArchives), "-auxclasspath", commandLineClasspath(auxClasspath), misc.priority.toString, - "-effort:%s".format(misc.effort.toString))))) + "-effort:%s".format(misc.effort.toString), + "-pluginList", findbugsPluginList.mkString(":"))))) } def addOnlyAnalyzeParameter(arguments: List[String]) = misc.onlyAnalyze match { diff --git a/src/main/scala/de/johoop/findbugs4sbt/FindBugs.scala b/src/main/scala/de/johoop/findbugs4sbt/FindBugs.scala index 9603ba6..3f40961 100644 --- a/src/main/scala/de/johoop/findbugs4sbt/FindBugs.scala +++ b/src/main/scala/de/johoop/findbugs4sbt/FindBugs.scala @@ -17,12 +17,12 @@ import Keys._ object FindBugs extends Plugin with Settings with CommandLine with CommandLineExecutor { - override def findbugsTask(findbugsClasspath: Classpath, compileClasspath: Classpath, - paths: PathSettings, filters: FilterSettings, misc: MiscSettings, javaHome: Option[File], + override def findbugsTask(findbugsPluginList: Seq[String], findbugsClasspath: Classpath, compileClasspath: Classpath, + paths: PathSettings, filters: FilterSettings, misc: MiscSettings, javaHome: Option[File], streams: TaskStreams): Unit = { IO.withTemporaryDirectory { filterPath => - val cmd = commandLine(findbugsClasspath, compileClasspath, paths, filters, filterPath, misc, streams) + val cmd = commandLine(findbugsPluginList, findbugsClasspath, compileClasspath, paths, filters, filterPath, misc, streams) streams.log.debug("FindBugs command line to execute: \"%s\"" format (cmd mkString " ")) executeCommandLine(cmd, javaHome, streams.log) } diff --git a/src/main/scala/de/johoop/findbugs4sbt/Settings.scala b/src/main/scala/de/johoop/findbugs4sbt/Settings.scala index a61ad8d..a0a7b13 100644 --- a/src/main/scala/de/johoop/findbugs4sbt/Settings.scala +++ b/src/main/scala/de/johoop/findbugs4sbt/Settings.scala @@ -36,6 +36,7 @@ private[findbugs4sbt] trait Settings extends Plugin { val findbugs = TaskKey[Unit]("findbugs") + val findbugsPluginList = TaskKey[Seq[String]]("findbugs-plugin-list") val findbugsClasspath = TaskKey[Classpath]("findbugs-classpath") val findbugsPathSettings = TaskKey[PathSettings]("findbugs-path-settings") val findbugsFilterSettings = TaskKey[FilterSettings]("findbugs-filter-settings") @@ -79,8 +80,8 @@ private[findbugs4sbt] trait Settings extends Plugin { * None by default. */ val findbugsExcludeFilters = TaskKey[Option[Node]]("findbugs-exclude-filter") - protected def findbugsTask(findbugsClasspath: Classpath, compileClasspath: Classpath, - paths: PathSettings, filters: FilterSettings, misc: MiscSettings, javaHome: Option[File], + protected def findbugsTask(findbugsPluginList: Seq[String], findbugsClasspath: Classpath, compileClasspath: Classpath, + paths: PathSettings, filters: FilterSettings, misc: MiscSettings, javaHome: Option[File], streams: TaskStreams): Unit private val findbugsConfig = config("findbugs") hide @@ -92,7 +93,7 @@ private[findbugs4sbt] trait Settings extends Plugin { "com.google.code.findbugs" % "jsr305" % "3.0.0" % "findbugs->default" ), - findbugs <<= (findbugsClasspath, managedClasspath in Compile, + findbugs <<= (findbugsPluginList, findbugsClasspath, managedClasspath in Compile, findbugsPathSettings, findbugsFilterSettings, findbugsMiscSettings, javaHome, streams) map findbugsTask, findbugsPathSettings <<= (findbugsReportPath, findbugsAnalyzedPath, findbugsAuxiliaryPath) map PathSettings dependsOn (compile in Compile), @@ -100,6 +101,7 @@ private[findbugs4sbt] trait Settings extends Plugin { findbugsMiscSettings <<= (findbugsReportType, findbugsPriority, findbugsOnlyAnalyze, findbugsMaxMemory, findbugsAnalyzeNestedArchives, findbugsSortReportByClassNames, findbugsEffort) map MiscSettings, + findbugsPluginList := Seq(), findbugsClasspath := Classpaths managedJars (findbugsConfig, classpathTypes value, update value), findbugsReportType := Some(ReportType.Xml),