buildscript {
    ext.gradle_version = '3.4.0-beta01'
    ext.studio_version = '26.4.0-beta01'
    ext.kotlin_version = '1.3.20'
    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.3"
        languageVersion = "1.3"
    }
}

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"
    implementation "org.jetbrains.kotlin:kotlin-reflect:$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:4.0.4'
    }
}
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.29.0"
}

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"
}
