class Danger::DangerFindbugs

Checks on your gradle project's Java source files. This is done using [finbugs](findbugs.sourceforge.net/) Results are passed out as tables in markdown.

@example Running Findbugs with its basic configuration

findbugs.report

@example Running Findbugs with a specific gradle task or report_file

findbugs.gradle_task = "app:findbugs" #defalut: findbugs
findbugs.report_file = "app/build/reports/findbugs/findbugs.xml"
findbugs.report

@see kazy1991/danger-findbugs @tags android, findbugs

Constants

GRADLEW_NOT_FOUND
REPORT_FILE_NOT_FOUND

Attributes

gradle_module[W]

Custom gradle module to run. This is useful when your project has different flavors. Defaults to “app”. @return [String]

gradle_modules[W]

Custom multiple gradle module to run. Defaults to “[gradle_module]”. @return [Array]

gradle_project[RW]

Custom gradle project directory. Defaults is repository's root directory. @return [String]

gradle_task[W]

Custom gradle task to run. This is useful when your project has different flavors. Defaults to “findbugs”. @return [String]

report_file[W]

Location of report file If your findbugs task outputs to a different location, you can specify it here. Defaults to “build/reports/findbugs_report.xml”. @return [String]

skip_gradle_task[W]

Skip gradle task If you skip gradle task, for example project does not manage gradle. @return [Bool]

Public Instance Methods

execute_reporting(inline_mode) click to toggle source

@return [void]

# File lib/findbugs/plugin.rb, line 93
def execute_reporting(inline_mode)
    exec_gradle_task
    return fail(REPORT_FILE_NOT_FOUND) unless report_file_exist?

    if inline_mode
      send_inline_comment
    else
      # TODO not implemented
    end
end
gradle_module() click to toggle source

A getter for `gradle_module`, returning “app” if value is nil. @return [String]

# File lib/findbugs/plugin.rb, line 106
def gradle_module
  @gradle_module ||= 'app'
end
gradle_modules() click to toggle source

A getter for `gradle_modules`, returning “[gradle_module]” if value is nil. @return [Array]

# File lib/findbugs/plugin.rb, line 112
def gradle_modules
  @gradle_modules ||= Array.new
end
gradle_task() click to toggle source

A getter for `gradle_task`, returning “findbugs” if value is nil. @return [String]

# File lib/findbugs/plugin.rb, line 118
def gradle_task
  @gradle_task  ||= 'findbugs'
end
report(inline_mode = true) click to toggle source

Calls findbugs task of your gradle project. It fails if `gradlew` cannot be found inside current directory. It fails if `report_file` cannot be found inside current directory. @return [void]

# File lib/findbugs/plugin.rb, line 60
def report(inline_mode = true)
  return fail(GRADLEW_NOT_FOUND) unless gradlew_exists?
  if gradle_modules.empty?
      execute_reporting(inline_mode)
  end
  unless skip_gradle_task
    return fail(GRADLEW_NOT_FOUND) unless gradlew_exists?
    exec_gradle_task
  end
  return fail(REPORT_FILE_NOT_FOUND) unless report_file_exist?

  if inline_mode
    send_inline_comment

  else
      gradle_modules.each_with_index { |gradleModule, index|
          task = gradle_task
          file = report_file
          @gradle_module = gradleModule
          @gradle_task = gradleModule + ":" + task
          @report_file = gradleModule + "/" + file

          execute_reporting(inline_mode)

          @gradle_task = task
          @report_file = file
          @bug_issues = nil
          @findbugs_report = nil
      }
  end
end
report_file() click to toggle source

A getter for `report_file`, returning “build/reports/findbugs_report.xml” if value is nil. @return [String]

# File lib/findbugs/plugin.rb, line 124
def report_file
  @report_file ||= 'build/reports/findbugs_report.xml'
end

Private Instance Methods

bug_issues() click to toggle source

A getter for `gradle_task`, returning “findbugs” if value is nil. @return [Array]

# File lib/findbugs/plugin.rb, line 181
def bug_issues
  @bug_issues ||= findbugs_report.xpath("//BugInstance").map do |buginfo|
    BugIssue.new(gradle_module, buginfo)
  end
end
exec_gradle_task() click to toggle source

Run gradle task @return [void]

# File lib/findbugs/plugin.rb, line 149
def exec_gradle_task
  if gradle_project != ''
    "export DANGER_TMP=$PWD"
    "cd #{gradle_project}"
  end
  system "./gradlew #{gradle_task}"
  if gradle_project != ''
    "cd DANGER_TMP"
  end
end
findbugs_report() click to toggle source

A getter for `gradle_task`, returning “findbugs” if value is nil. @return [Oga::XML::Document]

# File lib/findbugs/plugin.rb, line 174
def findbugs_report
  require 'oga'
  @findbugs_report ||= Oga.parse_xml(File.open("#{gradle_project}#{report_file}"))
end
gradlew_exists?() click to toggle source

Check gradlew file exists in current directory @return [Bool]

# File lib/findbugs/plugin.rb, line 162
def gradlew_exists?
  `ls #{gradle_project}gradlew`.strip.empty? == false
end
report_file_exist?() click to toggle source

Check report_file exists in current directory @return [Bool]

# File lib/findbugs/plugin.rb, line 168
def report_file_exist?
  File.exists?("#{gradle_project}#{report_file}")
end
send_inline_comment() click to toggle source

Send inline comment with danger's warn or fail method

@return [void]

# File lib/findbugs/plugin.rb, line 190
def send_inline_comment
  bug_issues.each do |issue|
    filename = "#{gradle_project}#{issue.absolute_path}"
    next unless target_files.include? filename
    send(issue.type, issue.description, file: filename, line: issue.line)
  end
end
skip_gradle_task() click to toggle source

A getter for `skip_gradle_task`, returning false if value is nil. @return [Bool]

# File lib/findbugs/plugin.rb, line 143
def skip_gradle_task
  @skip_gradle_task ||= false
end
target_files() click to toggle source

A getter for current updated files @return [Array]

# File lib/findbugs/plugin.rb, line 137
def target_files
  @target_files ||= (git.modified_files - git.deleted_files) + git.added_files
end