// NOTE: The only changes that belong in this file are the definitions
// of tool versions (gradle plugin, compile SDK, build tools), so that
// Volley can be built via gradle as a standalone project.
//
// Any other changes to the build config belong in rules.gradle, which
// is used by projects that depend on Volley but define their own
// tools versions across all dependencies to ensure a consistent build.
//
// Most users should just add this line to settings.gradle:
//     include(":volley")
//
// If you have a more complicated Gradle setup you can choose to use
// this instead:
//     include(":volley")
//     project(':volley').buildFileName = 'rules.gradle'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
    }
}

plugins {
    id "com.github.sherter.google-java-format" version "0.6"
    id "net.ltgt.errorprone" version "0.0.13"
}

googleJavaFormat {
    toolVersion = '1.5'
    options style: 'AOSP'
}

apply plugin: 'com.android.library'

repositories {
    jcenter()
    maven {
        url 'https://maven.google.com/'
        name 'Google'
    }
}

group = 'com.android.volley'
version = '1.2.0-SNAPSHOT'

android {
    compileSdkVersion 25
    buildToolsVersion = '25.0.2'
}

tasks.withType(JavaCompile) {
    options.compilerArgs << "-Xep:ParameterComment:ERROR"
}

apply from: 'rules.gradle'
apply from: 'bintray.gradle'
