/*
 * Copyright (C) 2021. Uber Technologies
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
plugins {
    id 'java-library'
    id 'nullaway.jacoco-conventions'
}

// Use JDK 17 for this module, via a toolchain
java.toolchain.languageVersion.set JavaLanguageVersion.of(17)

configurations {
    // We use this configuration to expose a module path that can be
    // used to test analysis of module-info.java files.
    // See com.uber.nullaway.jdk17.NullAwayModuleInfoTests
    testModulePath
}

dependencies {
    testImplementation project(":nullaway")
    testImplementation deps.test.junit4
    testImplementation(deps.build.errorProneTestHelpers) {
        exclude group: "junit", module: "junit"
    }
    testImplementation deps.build.jsr305Annotations
    testModulePath deps.test.cfQual
}

test {
    maxHeapSize = "1024m"
    // to expose necessary JDK types on JDK 16+; see https://errorprone.info/docs/installation#java-9-and-newer
    jvmArgs += [
            "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
            "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
            "--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
            "--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
            // Expose a module path for tests as a JVM property.
            // Used by com.uber.nullaway.jdk17.NullAwayModuleInfoTests
            "-Dtest.module.path=${configurations.testModulePath.asPath}"
    ]
}

