/**
 * Set up Checkstyle, Findbugs and PMD to perform extensive code analysis.
 *
 * Gradle tasks added:
 * - checkstyle
 * - findbugs
 * - pmd
 *
 * The three tasks above are added as dependencies of the check task so running check will
 * run all of them.
 **/

apply plugin: 'checkstyle'
apply plugin: 'findbugs'
apply plugin: 'pmd'

def qualityConfigDir = "$project.rootDir/config/quality"
def reportsDir = "$project.buildDir/reports"

dependencies {
  checkstyle 'com.puppycrawl.tools:checkstyle:6.5'
}

//check.dependsOn 'checkstyle', 'findbugs', 'pmd'

def getFindBugsDependencies(project) {
  if (project.hasProperty('android')) {
    return ['compileDebugSources', 'compileReleaseSources']
  } else {
    return ['compileJava']
  }
}

allprojects { project ->
  checkstyle {
    ignoreFailures = true
    configFile = rootProject.file("$qualityConfigDir/checkstyle/checkstyle-config.xml")
  }

  findbugs {
    ignoreFailures = true
  }

  task checkstyle(type: Checkstyle, group: 'Verification', description: 'Runs code style checks') {
    source 'src'
    include '**/*.java'

    reports {
      html.enabled = true
      html {
        destination "$reportsDir/checkstyle/checkstyle.html"
      }
      xml.enabled = false
      xml {
        destination "$reportsDir/checkstyle/checkstyle.xml"
      }
    }

    classpath = files()
  }

  task findbugs(type: FindBugs,
      group: 'Verification',
      description: 'Inspect java bytecode for bugs',
      dependsOn: getFindBugsDependencies(project)) {

    ignoreFailures = true
    effort = "max"
    reportLevel = "high"
    excludeFilter = new File("$qualityConfigDir/findbugs/android-exclude-filter.xml")
    classes = files("$project.rootDir/app/build/intermediates/classes")

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
      xml.enabled = false
      html.enabled = true
      xml {
        destination "$reportsDir/findbugs/findbugs.xml"
      }
      html {
        destination "$reportsDir/findbugs/findbugs.html"
      }
    }

    classpath = files()
  }


  task pmd(type: Pmd, group: 'Verification', description: 'Inspect sourcecode for bugs') {
    ruleSetFiles = files("$qualityConfigDir/pmd/pmd-ruleset.xml")
    ignoreFailures = true
    ruleSets = []

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
      xml.enabled = true
      html.enabled = true
      xml {
        destination "$reportsDir/pmd/pmd.xml"
      }
      html {
        destination "$reportsDir/pmd/pmd.html"
      }
    }
  }
}
