From 72f37a278cea091f958aa5cd28a2edc38e665a3a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 28 Jun 2017 15:19:14 +0300 Subject: [PATCH] Do not add all modules from module path when compiling unnamed module Note that javac reports a nice error in this case ("package foo is declared in module lib, which is not in the module graph"), but we only report "unresolved reference" because the corresponding modules are not added to classpath roots. We should improve this in the future #KT-18598 In Progress --- .../kotlin/cli/jvm/compiler/ClasspathRootsResolver.kt | 2 +- .../unnamedDoesNotReadNotAdded/moduleA/foo/Foo.java | 3 +++ .../unnamedDoesNotReadNotAdded/moduleA/module-info.java | 3 +++ .../javaModules/unnamedDoesNotReadNotAdded/moduleB.txt | 7 +++++++ .../unnamedDoesNotReadNotAdded/moduleB/usage.kt | 5 +++++ .../kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt | 6 ++++++ 6 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/foo/Foo.java create mode 100644 compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/module-info.java create mode 100644 compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB.txt create mode 100644 compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB/usage.kt diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ClasspathRootsResolver.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ClasspathRootsResolver.kt index 152f6e2e1e6..f02d9288501 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ClasspathRootsResolver.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/ClasspathRootsResolver.kt @@ -144,7 +144,7 @@ internal class ClasspathRootsResolver( val rootModules = when { sourceModules.isNotEmpty() -> listOf(sourceModules.single().name) + additionalModules addAllModulePathToRoots -> modules.map(JavaModule::name) - else -> computeDefaultRootModules() + modules.map(JavaModule::name) + else -> computeDefaultRootModules() + additionalModules } // TODO: if at least one automatic module is added, add all automatic modules as per java.lang.module javadoc diff --git a/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/foo/Foo.java b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/foo/Foo.java new file mode 100644 index 00000000000..7f566bafd45 --- /dev/null +++ b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/foo/Foo.java @@ -0,0 +1,3 @@ +package foo; + +public class Foo {} diff --git a/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/module-info.java b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/module-info.java new file mode 100644 index 00000000000..cbfe65e9b40 --- /dev/null +++ b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleA/module-info.java @@ -0,0 +1,3 @@ +module moduleA { + exports foo; +} diff --git a/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB.txt b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB.txt new file mode 100644 index 00000000000..ccb611253d8 --- /dev/null +++ b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB.txt @@ -0,0 +1,7 @@ +compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB/usage.kt:1:8: error: unresolved reference: foo +import foo.Foo + ^ +compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB/usage.kt:4:5: error: unresolved reference: Foo + Foo() + ^ +COMPILATION_ERROR diff --git a/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB/usage.kt b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB/usage.kt new file mode 100644 index 00000000000..91c127ff438 --- /dev/null +++ b/compiler/testData/javaModules/unnamedDoesNotReadNotAdded/moduleB/usage.kt @@ -0,0 +1,5 @@ +import foo.Foo + +fun usage() { + Foo() +} diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt index 39ee19fa7e5..b077063b794 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/Java9ModulesIntegrationTest.kt @@ -101,4 +101,10 @@ class Java9ModulesIntegrationTest : AbstractKotlinCompilerIntegrationTest() { fun testJdkModulesFromUnnamed() { module("main") } + + fun testUnnamedDoesNotReadNotAdded() { + // Test that although we have moduleA in the module path, it's not in the module graph + // because we did not provide -Xadd-modules=moduleA + module("moduleB", listOf(module("moduleA")), addModules = emptyList()) + } }