diff --git a/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromNamed/main/module-info.java b/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromNamed/main/module-info.java new file mode 100644 index 00000000000..e7e86dd9f44 --- /dev/null +++ b/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromNamed/main/module-info.java @@ -0,0 +1,3 @@ +module main { + requires kotlin.stdlib; +} diff --git a/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromNamed/main/test.kt b/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromNamed/main/test.kt new file mode 100644 index 00000000000..ca6836f760c --- /dev/null +++ b/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromNamed/main/test.kt @@ -0,0 +1,4 @@ +fun main() { + val x: com.sun.javafx.tools.ant.AntLog? = null + println(x) +} diff --git a/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromUnnamed/main/test.kt b/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromUnnamed/main/test.kt new file mode 100644 index 00000000000..ca6836f760c --- /dev/null +++ b/compiler/testData/javaModules/doNotLoadIrrelevantJarsFromUnnamed/main/test.kt @@ -0,0 +1,4 @@ +fun main() { + val x: com.sun.javafx.tools.ant.AntLog? = null + println(x) +} diff --git a/compiler/testData/javaModules/jdkModulesFromNamed/main.txt b/compiler/testData/javaModules/jdkModulesFromNamed/main.txt index 23263452275..1f03e3bed1e 100644 --- a/compiler/testData/javaModules/jdkModulesFromNamed/main.txt +++ b/compiler/testData/javaModules/jdkModulesFromNamed/main.txt @@ -14,20 +14,4 @@ public inline fun println(message: Long): Unit defined in kotlin.io public inline fun println(message: Short): Unit defined in kotlin.io println(s) ^ -compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:19:20: error: unresolved reference: javafx - val x: com.sun.javafx.tools.ant.AntLog? = null - ^ -compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:20:5: error: overload resolution ambiguity: -public inline fun println(message: Any?): Unit defined in kotlin.io -public inline fun println(message: Boolean): Unit defined in kotlin.io -public inline fun println(message: Byte): Unit defined in kotlin.io -public inline fun println(message: Char): Unit defined in kotlin.io -public inline fun println(message: CharArray): Unit defined in kotlin.io -public inline fun println(message: Double): Unit defined in kotlin.io -public inline fun println(message: Float): Unit defined in kotlin.io -public inline fun println(message: Int): Unit defined in kotlin.io -public inline fun println(message: Long): Unit defined in kotlin.io -public inline fun println(message: Short): Unit defined in kotlin.io - println(x) - ^ COMPILATION_ERROR diff --git a/compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt b/compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt index 917eeda39e5..38a46ba0042 100644 --- a/compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt +++ b/compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt @@ -14,8 +14,4 @@ fun main(args: Array) { // Module oracle.desktop val a: com.oracle.awt.AWTUtils? = null println(a) - - // No module, this class is declared in $JDK_9/lib/ant-javafx.jar - val x: com.sun.javafx.tools.ant.AntLog? = null - println(x) } diff --git a/compiler/testData/javaModules/jdkModulesFromUnnamed/main.txt b/compiler/testData/javaModules/jdkModulesFromUnnamed/main.txt index f93be16ff13..d86bac9de59 100644 --- a/compiler/testData/javaModules/jdkModulesFromUnnamed/main.txt +++ b/compiler/testData/javaModules/jdkModulesFromUnnamed/main.txt @@ -1,17 +1 @@ -compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt:19:33: error: unresolved reference: ant - val x: com.sun.javafx.tools.ant.AntLog? = null - ^ -compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt:20:5: error: overload resolution ambiguity: -public inline fun println(message: Any?): Unit defined in kotlin.io -public inline fun println(message: Boolean): Unit defined in kotlin.io -public inline fun println(message: Byte): Unit defined in kotlin.io -public inline fun println(message: Char): Unit defined in kotlin.io -public inline fun println(message: CharArray): Unit defined in kotlin.io -public inline fun println(message: Double): Unit defined in kotlin.io -public inline fun println(message: Float): Unit defined in kotlin.io -public inline fun println(message: Int): Unit defined in kotlin.io -public inline fun println(message: Long): Unit defined in kotlin.io -public inline fun println(message: Short): Unit defined in kotlin.io - println(x) - ^ -COMPILATION_ERROR +OK diff --git a/compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt b/compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt index 31eefeed37f..b9626822910 100644 --- a/compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt +++ b/compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt @@ -14,8 +14,4 @@ fun main(args: Array) { // Module oracle.desktop val a: com.oracle.awt.AWTUtils? = null println(a) - - // No module, this class is declared in $JDK_9/lib/ant-javafx.jar - val x: com.sun.javafx.tools.ant.AntLog? = null - println(x) } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt index f39a36da96b..8d58b8ff89d 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt @@ -19,11 +19,12 @@ class Java9ModulesIntegrationTest : AbstractKotlinCompilerIntegrationTest() { get() = "compiler/testData/javaModules/" private fun module( - name: String, - modulePath: List = emptyList(), - addModules: List = emptyList(), - additionalKotlinArguments: List = emptyList(), - manifest: Manifest? = null + name: String, + modulePath: List = emptyList(), + addModules: List = emptyList(), + additionalKotlinArguments: List = emptyList(), + manifest: Manifest? = null, + checkKotlinOutput: (String) -> Unit = this.checkKotlinOutput(name), ): File { val paths = (modulePath + ForTestCompileRuntime.runtimeJarForTests()).joinToString(separator = File.pathSeparator) { it.path } @@ -38,21 +39,21 @@ class Java9ModulesIntegrationTest : AbstractKotlinCompilerIntegrationTest() { kotlinOptions += additionalKotlinArguments return compileLibrary( - name, - additionalOptions = kotlinOptions, - compileJava = { _, javaFiles, outputDir -> - val javaOptions = mutableListOf( - "-d", outputDir.path, - "--module-path", paths - ) - if (addModules.isNotEmpty()) { - javaOptions += "--add-modules" - javaOptions += addModules.joinToString() - } - KotlinTestUtils.compileJavaFilesExternallyWithJava9(javaFiles, javaOptions) - }, - checkKotlinOutput = checkKotlinOutput(name), - manifest = manifest + name, + additionalOptions = kotlinOptions, + compileJava = { _, javaFiles, outputDir -> + val javaOptions = mutableListOf( + "-d", outputDir.path, + "--module-path", paths + ) + if (addModules.isNotEmpty()) { + javaOptions += "--add-modules" + javaOptions += addModules.joinToString() + } + KotlinTestUtils.compileJavaFilesExternallyWithJava9(javaFiles, javaOptions) + }, + checkKotlinOutput = checkKotlinOutput, + manifest = manifest ) } @@ -274,4 +275,20 @@ class Java9ModulesIntegrationTest : AbstractKotlinCompilerIntegrationTest() { assertEquals("", stderr) assertEquals("OK", stdout) } + + fun testDoNotLoadIrrelevantJarsFromUnnamed() { + // This test checks that we don't load irrelevant .jar files from the JDK distribution when resolving JDK dependencies. + // Here we're testing that references to symbols from lib/ant-javafx are unresolved, if that file is present. + // The test succeeds though even if the file is absent, because it's not guaranteed to be present in JDK. + module("main", checkKotlinOutput = { + assertTrue(it, it.trimEnd().endsWith("COMPILATION_ERROR")) + }) + } + + fun testDoNotLoadIrrelevantJarsFromNamed() { + // See the comment in testDoNotLoadIrrelevantJarsFromUnnamed. + module("main", checkKotlinOutput = { + assertTrue(it, it.trimEnd().endsWith("COMPILATION_ERROR")) + }) + } }