plugins {
    id "maven-publish"
    id "com.android.library"
    id "digital.wup.android-maven-publish"
}

description = 'gRPC BinderChannel'

android {
    sourceSets {
        test {
            java {
                srcDirs += "${projectDir}/../core/src/test/java/"
                setIncludes(["io/grpc/internal/FakeClock.java",
                             "io/grpc/binder/**"])
            }
        }
        androidTest {
            java {
                srcDirs += "${projectDir}/../core/src/test/java/"
                setIncludes(["io/grpc/internal/AbstractTransportTest.java",
                             "io/grpc/binder/**"])
            }
        }
    }
    compileSdkVersion 29
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    lintOptions { abortOnError false }
}

repositories {
    google()
    mavenCentral()
}

dependencies {
    api project(':grpc-core')

    implementation libraries.androidx_annotation
    implementation libraries.androidx_core
    implementation libraries.androidx_lifecycle_common
    implementation libraries.guava
    testImplementation libraries.androidx_core
    testImplementation libraries.androidx_test
    testImplementation libraries.androidx_lifecycle_common
    testImplementation libraries.androidx_lifecycle_service
    testImplementation libraries.junit
    testImplementation libraries.mockito
    testImplementation (libraries.robolectric) {
        // Unreleased change: https://github.com/robolectric/robolectric/pull/5432
        exclude group: 'com.google.auto.service', module: 'auto-service'
    }
    testImplementation (libraries.guava_testlib) {
        exclude group: 'junit', module: 'junit'
    }
    testImplementation libraries.truth

    androidTestAnnotationProcessor libraries.autovalue
    androidTestImplementation project(':grpc-testing')
    androidTestImplementation project(':grpc-protobuf-lite')
    androidTestImplementation libraries.autovalue_annotation
    androidTestImplementation libraries.junit
    androidTestImplementation libraries.androidx_core
    androidTestImplementation libraries.androidx_test
    androidTestImplementation libraries.androidx_test_rules
    androidTestImplementation libraries.androidx_test_ext_junit
    androidTestImplementation libraries.truth
    androidTestImplementation libraries.mockito_android
    androidTestImplementation libraries.androidx_lifecycle_service
    androidTestImplementation (libraries.guava_testlib) {
        exclude group: 'junit', module: 'junit'
    }
}

import net.ltgt.gradle.errorprone.CheckSeverity

tasks.withType(JavaCompile) {
    options.compilerArgs += [
            "-Xlint:-cast"
    ]
    appendToProperty(it.options.errorprone.excludedPaths, ".*/R.java", "|")
    // Reuses source code from grpc-core, which targets Java 7 (no method references)
    options.errorprone.check("UnnecessaryAnonymousClass", CheckSeverity.OFF)
}

task javadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += files(android.getBootClasspath())
    classpath += files({
        android.libraryVariants.collect { variant ->
            variant.javaCompileProvider.get().classpath
        }
    })
    options {
        // Disable JavaDoc doclint on Java 8.
        if (JavaVersion.current().isJava8Compatible()) {
            addStringOption('Xdoclint:none', '-quiet')
        }
    }
}

task javadocJar(type: Jar, dependsOn: javadocs) {
    archiveClassifier = 'javadoc'
    from javadocs.destinationDir
}

task sourcesJar(type: Jar) {
    archiveClassifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

publishing {
    publications {
        maven {
            from components.android

            artifact javadocJar
            artifact sourcesJar
        }
    }
}
