// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.3"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
    }
}

subprojects {
    apply plugin: "checkstyle"

    checkstyle {
        configFile = file("$rootDir/../buildscripts/checkstyle.xml")
        toolVersion = "6.17"
        ignoreFailures = false
        if (rootProject.hasProperty("checkstyle.ignoreFailures")) {
            ignoreFailures = rootProject.properties["checkstyle.ignoreFailures"].toBoolean()
        }
        configProperties["rootDir"] = "$rootDir/../"
    }

    // Checkstyle doesn't run automatically with android
    task checkStyleMain(type: Checkstyle) {
        source 'src/main/java'
        include '**/*.java'
        classpath = files()
    }

    task checkStyleTest(type: Checkstyle) {
        source 'src/test/java'
        include '**/*.java'
        classpath = files()
    }

    afterEvaluate { project ->
        project.tasks['check'].dependsOn checkStyleMain, checkStyleTest
    }
}
