buildscript {
    ext.gradle_version = '3.2.0-alpha16'
    ext.studio_version = '26.2.0-alpha16'
    ext.kotlin_version = '1.2.41'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.android.tools.build:gradle:$gradle_version"
    }
}

repositories {
    google()
    jcenter()
}

apply plugin: 'application'
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'maven'

group = 'com.android'
def versionPropertyFile = file('src/main/resources/version.properties')
if (versionPropertyFile.canRead()) {
   Properties versionProps = new Properties()
   versionProps.load(new FileInputStream(versionPropertyFile))
   version = versionProps['metalavaVersion']
} else {
    throw new FileNotFoundException("Could not read $versionPropertyFile")
}

mainClassName = "com.android.tools.metalava.Driver"
applicationDefaultJvmArgs = ["-ea", "-Xms2g", "-Xmx4g"]
sourceCompatibility = 1.8

compileKotlin {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    kotlinOptions {
        jvmTarget = "1.8"
        apiVersion = "1.2"
        languageVersion = "1.2"
    }
}

dependencies {
    implementation "com.android.tools.external.org-jetbrains:uast:$studio_version"
    implementation "com.android.tools.external.com-intellij:intellij-core:$studio_version"
    implementation "com.android.tools.lint:lint-api:$studio_version"
    implementation "com.android.tools.lint:lint-checks:$studio_version"
    implementation "com.android.tools.lint:lint-gradle:$studio_version"
    implementation "com.android.tools.lint:lint:$studio_version"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    testImplementation "com.android.tools.lint:lint-tests:$studio_version"
    testImplementation 'junit:junit:4.11'
}

// shadow jar: Includes all dependencies
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
    }
}
apply plugin: 'com.github.johnrengelman.shadow'
shadowJar {
   baseName = "metalava-$version-full-SNAPSHOT"
   classifier = null
   version = null
   zip64 = true
}

defaultTasks 'clean', 'installDist'

/*
 * With the build server you are given two env variables:
 * 1. The OUT_DIR is a temporary directory you can use to put things during the build.
 * 2. The DIST_DIR is where you want to save things from the build.
 *
 * The build server will copy the contents of DIST_DIR to somewhere and make it available.
 */
if (System.env.DIST_DIR != null && System.env.OUT_DIR != null) {
    buildDir = file("${System.env.OUT_DIR}/host/common/metalava").getCanonicalFile()
    ext.distDir = file(System.env.DIST_DIR).getCanonicalFile()
    ext.distsDir = ext.distDir

    // The distDir is conveniently named after the build ID.
    version = "${version}.${ext.distDir.name}"
} else {
    buildDir = file('../../out/host/common')
    ext.distDir = file('../../out/dist')
    ext.distsDir = ext.distDir

    // Local builds are not public release candidates.
    version = "${version}-SNAPSHOT"
}

// KtLint: https://github.com/shyiko/ktlint

configurations {
    ktlint
}

dependencies {
    ktlint "com.github.shyiko:ktlint:0.23.1"
}

task ktlint(type: JavaExec, group: "verification") {
    description = "Check Kotlin code style."
    main = "com.github.shyiko.ktlint.Main"
    classpath = configurations.ktlint
    args "src/**/*.kt"
}
check.dependsOn ktlint

task format(type: JavaExec, group: "formatting") {
    description = "Fix Kotlin code style deviations."
    main = "com.github.shyiko.ktlint.Main"
    classpath = configurations.ktlint
    args "-F", "src/**/*.kt"
}
