/**
 * 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'

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

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

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

task checkstyle(type: Checkstyle, group: 'Verification', description: 'Runs code style checks') {
    configFile file("$qualityConfigDir/checkstyle/checkstyle-config.xml")
    source 'src'
    include '**/*.java'

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

    classpath = files()
}

task findbugs(type: FindBugs,
        group: 'Verification',
        description: 'Inspect java bytecode for bugs',
        dependsOn: ['compileDebugSources']) {

    ignoreFailures = false
    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 = false
    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"
        }
    }
}