Report warning for several modules with same name on module path
This commit is contained in:
@@ -154,8 +154,16 @@ internal class ClasspathRootsResolver(
|
||||
}
|
||||
|
||||
for (module in modules) {
|
||||
// TODO: report a diagnostic if a module with this name was already added
|
||||
javaModuleFinder.addUserModule(module)
|
||||
val existing = javaModuleFinder.findModule(module.name)
|
||||
if (existing == null) {
|
||||
javaModuleFinder.addUserModule(module)
|
||||
}
|
||||
else if (module.moduleRoot != existing.moduleRoot) {
|
||||
val jar = VfsUtilCore.getVirtualFileForJar(module.moduleRoot) ?: module.moduleRoot
|
||||
val existingPath = (VfsUtilCore.getVirtualFileForJar(existing.moduleRoot) ?: existing.moduleRoot).path
|
||||
report(STRONG_WARNING, "The root is ignored because a module with the same name '${module.name}' " +
|
||||
"has been found earlier on the module path at: $existingPath", jar)
|
||||
}
|
||||
}
|
||||
|
||||
if (javaModuleFinder.allObservableModules.none()) return
|
||||
|
||||
@@ -26,13 +26,8 @@ import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleInfo
|
||||
internal class CliJavaModuleFinder(private val jrtFileSystem: VirtualFileSystem?) : JavaModuleFinder {
|
||||
private val userModules = linkedMapOf<String, JavaModule>()
|
||||
|
||||
/**
|
||||
* @return true if the module was added successfully, false otherwise
|
||||
*/
|
||||
fun addUserModule(module: JavaModule): Boolean {
|
||||
if (module.name in userModules) return false
|
||||
userModules[module.name] = module
|
||||
return true
|
||||
fun addUserModule(module: JavaModule) {
|
||||
userModules.putIfAbsent(module.name, module)
|
||||
}
|
||||
|
||||
val allObservableModules: Sequence<JavaModule>
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo;
|
||||
|
||||
public class Foo {}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module dependency {
|
||||
exports foo;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package bar;
|
||||
|
||||
public class Bar {}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module dependency {
|
||||
exports bar;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
compiler/testData/javaModules/severalModulesWithTheSameName/main/usage.kt:2:8: error: unresolved reference: bar
|
||||
import bar.Bar
|
||||
^
|
||||
compiler/testData/javaModules/severalModulesWithTheSameName/main/usage.kt:6:12: error: unresolved reference: Bar
|
||||
val b: Bar = Bar()
|
||||
^
|
||||
compiler/testData/javaModules/severalModulesWithTheSameName/main/usage.kt:6:18: error: unresolved reference: Bar
|
||||
val b: Bar = Bar()
|
||||
^
|
||||
$TMP_DIR$/dependency2.jar: warning: the root is ignored because a module with the same name 'dependency' has been found earlier on the module path at: $TMP_DIR$/dependency1.jar
|
||||
COMPILATION_ERROR
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module main {
|
||||
requires dependency;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import foo.Foo
|
||||
import bar.Bar
|
||||
|
||||
fun usage(): String {
|
||||
val f: Foo = Foo()
|
||||
val b: Bar = Bar()
|
||||
return "$f$b"
|
||||
}
|
||||
@@ -213,4 +213,10 @@ class Java9ModulesIntegrationTest : AbstractKotlinCompilerIntegrationTest() {
|
||||
val b = module("autoB")
|
||||
module("main", listOf(a, b))
|
||||
}
|
||||
|
||||
fun testSeveralModulesWithTheSameName() {
|
||||
val d1 = module("dependency1")
|
||||
val d2 = module("dependency2")
|
||||
module("main", listOf(d1, d2))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user