description = ''

apply plugin: 'kotlin'

JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_8)

def includeJava9 = BuildPropertiesExtKt.getIncludeJava9(project.kotlinBuildProperties)

sourceSets {
    main {
        java {
            srcDir "${rootDir}/core/reflection.jvm/src"
        }
        resources {
            srcDir("${rootDir}/core/reflection.jvm/resources")
        }
    }

    if (includeJava9) {
        java9
    }
}

dependencies {
    api RepoDependencies.kotlinStdlib(project)
    compileOnly project(':core:descriptors')
    compileOnly project(':core:descriptors.jvm')
    compileOnly project(':core:deserialization')
    compileOnly project(':core:descriptors.runtime')
    compileOnly project(':core:util.runtime')
    compileOnly "org.jetbrains:annotations:13.0"
}

if (includeJava9) {
    configurations.register('java9PatchModule') {
        extendsFrom(configurations.compileOnly)
        exclude(group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib')
        canBeResolved = true
    }

    LibrariesCommon.configureJava9Compilation(
            project,
            'kotlin.reflect',
            [sourceSets.main.output, configurations.java9PatchModule]
    )
}

compileKotlin {
    compilerOptions {
        freeCompilerArgs = [
                "-Xallow-kotlin-package",
                "-Xno-optimized-callable-references",
                "-Xno-kotlin-nothing-value-exception",
                "-opt-in=kotlin.RequiresOptIn",
                "-opt-in=org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction",
                "-Xno-new-java-annotation-targets",
                "-Xdont-warn-on-error-suppression",
        ]
        moduleName = "kotlin-reflection"
    }
}

jar {
    LibrariesCommon.manifestAttributes(project, manifest, "internal")
}

tasks.register("java9Jar", Jar) {
    archiveClassifier.set("java9")
    if (includeJava9) {
        from sourceSets.java9.output
    }
}

artifacts {
    archives java9Jar
    runtimeElements java9Jar
}
