import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id "kotlin"
    id "java-gradle-plugin"
}

ext.supportRootFolder = project.projectDir.getParentFile().getParentFile()

apply from: "../../buildSrc/kotlin-dsl-dependency.gradle"

dependencies {
    implementation(project(":jetpad-integration"))

    compileOnly(findGradleKotlinDsl())
    implementation(gradleApi())

    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${libs.versions.kotlin.get()}")

    implementation(libs.androidGradlePlugin)
    implementation(libs.dexMemberList)
    implementation(libs.kotlinGradlePlugin)
    implementation(libs.kgpLeakPatcher)
    implementation(libs.kotlinPoet)

    implementation(libs.dokkaGradlePlugin)

    implementation(libs.androidLint)

    // Not really sure about these:
    implementation("com.googlecode.json-simple:json-simple:1.1")
    implementation("androidx.benchmark:benchmark-gradle-plugin:1.0.0")
    implementation(libs.protobufGradlePlugin)
    implementation(libs.shadow)
    implementation(libs.wireGradlePlugin)
}

sourceSets {
    main.java.srcDirs += "${supportRootFolder}/buildSrc/src/main/kotlin"
    main.java.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/kotlin"
    main.resources.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/resources"
}

version = "0.1.0"
group = "androidx.build"

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

tasks.withType(KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Werror"]
    }
}

gradlePlugin {
    plugins {
        AndroidXPlugin {
            id = "AndroidXPlugin"
            implementationClass = "androidx.build.AndroidXPlugin"
        }
        AndroidXUiPlugin {
            id = "AndroidXUiPlugin"
            implementationClass = "androidx.build.AndroidXUiPlugin"
        }
    }
}
