JVM: add tests on some JPMS-related diagnostics
Somehow we ended up in the state where we have two diagnostics which are not covered by any tests in the project. This commit adds simple tests for them. #KT-60797
This commit is contained in:
committed by
Space Team
parent
a5bf8787a1
commit
9fcf6c5f89
@@ -0,0 +1,6 @@
|
||||
package foo;
|
||||
|
||||
public class Foo {
|
||||
public int field = 42;
|
||||
public void method() {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
module lib {
|
||||
exports foo;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
compiler/testData/javaModules/noDependencyOnNamed/main/usage.kt:3:15: error: symbol is declared in module 'lib' which current module does not depend on
|
||||
fun test(foo: Foo) {
|
||||
^^^
|
||||
compiler/testData/javaModules/noDependencyOnNamed/main/usage.kt:4:9: error: symbol is declared in module 'lib' which current module does not depend on
|
||||
foo.field
|
||||
^^^^^
|
||||
compiler/testData/javaModules/noDependencyOnNamed/main/usage.kt:5:9: error: symbol is declared in module 'lib' which current module does not depend on
|
||||
foo.method()
|
||||
^^^^^^
|
||||
compiler/testData/javaModules/noDependencyOnNamed/main/usage.kt:6:5: error: symbol is declared in module 'lib' which current module does not depend on
|
||||
Foo()
|
||||
^^^
|
||||
COMPILATION_ERROR
|
||||
@@ -0,0 +1,3 @@
|
||||
module main {
|
||||
requires kotlin.stdlib;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import foo.*
|
||||
|
||||
fun test(foo: Foo) {
|
||||
foo.field
|
||||
foo.method()
|
||||
Foo()
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package foo;
|
||||
|
||||
public class Foo {
|
||||
public int field = 42;
|
||||
public void method() {}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
compiler/testData/javaModules/noDependencyOnUnnamed/main/usage.kt:3:15: error: symbol is declared in unnamed module which is not read by current module
|
||||
fun test(foo: Foo) {
|
||||
^^^
|
||||
compiler/testData/javaModules/noDependencyOnUnnamed/main/usage.kt:4:9: error: symbol is declared in unnamed module which is not read by current module
|
||||
foo.field
|
||||
^^^^^
|
||||
compiler/testData/javaModules/noDependencyOnUnnamed/main/usage.kt:5:9: error: symbol is declared in unnamed module which is not read by current module
|
||||
foo.method()
|
||||
^^^^^^
|
||||
compiler/testData/javaModules/noDependencyOnUnnamed/main/usage.kt:6:5: error: symbol is declared in unnamed module which is not read by current module
|
||||
Foo()
|
||||
^^^
|
||||
COMPILATION_ERROR
|
||||
@@ -0,0 +1,3 @@
|
||||
module main {
|
||||
requires kotlin.stdlib;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import foo.*
|
||||
|
||||
fun test(foo: Foo) {
|
||||
foo.field
|
||||
foo.method()
|
||||
Foo()
|
||||
}
|
||||
+28
-3
@@ -35,6 +35,7 @@ abstract class AbstractJavaModulesIntegrationTest(
|
||||
addModules: List<String> = emptyList(),
|
||||
additionalKotlinArguments: List<String> = emptyList(),
|
||||
manifest: Manifest? = null,
|
||||
destination: File? = null,
|
||||
checkKotlinOutput: (String) -> Unit = this.checkKotlinOutput(name),
|
||||
): File {
|
||||
val paths = (modulePath + ForTestCompileRuntime.runtimeJarForTests()).joinToString(separator = File.pathSeparator) { it.path }
|
||||
@@ -51,7 +52,8 @@ abstract class AbstractJavaModulesIntegrationTest(
|
||||
|
||||
return compileLibrary(
|
||||
name,
|
||||
additionalOptions = kotlinOptions,
|
||||
destination ?: File(tmpdir, "$name.jar"),
|
||||
kotlinOptions,
|
||||
compileJava = { _, javaFiles, outputDir ->
|
||||
val javaOptions = mutableListOf(
|
||||
"-d", outputDir.path,
|
||||
@@ -63,8 +65,8 @@ abstract class AbstractJavaModulesIntegrationTest(
|
||||
}
|
||||
KotlinTestUtils.compileJavaFilesExternallyWithJava11(javaFiles, javaOptions)
|
||||
},
|
||||
checkKotlinOutput = checkKotlinOutput,
|
||||
manifest = manifest
|
||||
checkKotlinOutput,
|
||||
manifest
|
||||
)
|
||||
}
|
||||
|
||||
@@ -349,4 +351,27 @@ abstract class AbstractJavaModulesIntegrationTest(
|
||||
assertTrue(it, it.trimEnd().endsWith("COMPILATION_ERROR"))
|
||||
})
|
||||
}
|
||||
|
||||
// TODO (KT-60797): missing JAVA_MODULE_DOES_NOT_DEPEND_ON_MODULE.
|
||||
fun testNoDependencyOnNamed() = muteForK2 {
|
||||
// This is a test on the JAVA_MODULE_DOES_NOT_DEPEND_ON_MODULE diagnostic.
|
||||
val lib = module("lib")
|
||||
module("main", listOf(lib), listOf("lib"))
|
||||
}
|
||||
|
||||
// TODO (KT-60797): missing JAVA_MODULE_DOES_NOT_READ_UNNAMED_MODULE.
|
||||
fun testNoDependencyOnUnnamed() = muteForK2 {
|
||||
// This is a test on the JAVA_MODULE_DOES_NOT_READ_UNNAMED_MODULE diagnostic.
|
||||
// Most of the other tests in this class are compiling modules to jars, however here we need to compile the module to a directory.
|
||||
// The reason is twofold:
|
||||
// 1) Currently the compiler adds all classpath entries as module path entries as long as we're compiling a named module (i.e. have
|
||||
// `module-info.java` in the sources), see `configureSourceRoots` in `KotlinToJVMBytecodeCompiler.kt`. This is most likely
|
||||
// incorrect.
|
||||
// 2) All jars found in the module path which are NOT named modules are loaded as automatic modules, see
|
||||
// `ClasspathRootsResolver.modularBinaryRoot`. Combined with p.1, it means that _any_ jar in the dependencies will be loaded
|
||||
// as either a named or an automatic module; there's no way to observe a jar that is a part of the unnamed module.
|
||||
// In this test we're checking the diagnostic about using symbols from unnamed modules, so we need to compile 'lib' to a directory.
|
||||
val lib = module("lib", destination = File(tmpdir, name))
|
||||
module("main", additionalKotlinArguments = listOf("-classpath", lib.path))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user