plugins {
    id "java-library"
    id "maven-publish"

    id "me.champeau.gradle.japicmp"
    id "me.champeau.gradle.jmh"
    id "ru.vyarus.animalsniffer"
}

description = "gRPC: Netty"

configurations {
    alpnagent
}

evaluationDependsOn(project(':grpc-core').path)

dependencies {
    api project(':grpc-core'),
            libraries.netty
    implementation libraries.netty_proxy_handler
    guavaDependency 'implementation'
    perfmarkDependency 'implementation'

    // Tests depend on base class defined by core module.
    testImplementation project(':grpc-core').sourceSets.test.output,
            project(':grpc-api').sourceSets.test.output,
            project(':grpc-testing'),
            project(':grpc-testing-proto')
    testRuntimeOnly libraries.netty_tcnative,
            libraries.conscrypt,
            libraries.netty_epoll
    signature "org.codehaus.mojo.signature:java17:1.0@signature"
    alpnagent libraries.jetty_alpn_agent
}

import net.ltgt.gradle.errorprone.CheckSeverity

[compileJava, compileTestJava].each() {
    // Netty retuns a lot of futures that we mostly don't care about.
    it.options.errorprone.check("FutureReturnValueIgnored", CheckSeverity.OFF)
}

javadoc {
    options.links 'http://netty.io/4.1/api/'
    exclude 'io/grpc/netty/Internal*'
}

project.sourceSets {
    main { java { srcDir "${projectDir}/third_party/netty/java" } }
}

test {
    // Allow testing Jetty ALPN in TlsTest
    jvmArgs "-javaagent:" + configurations.alpnagent.asPath
}

jmh {
    // Workaround
    // https://github.com/melix/jmh-gradle-plugin/issues/97#issuecomment-316664026
    includeTests = true
}

checkstyleMain {
    source = source.minus(fileTree(dir: "src/main", include: "**/Http2ControlFrameLimitEncoder.java"))
}
