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) {
|
for (module in modules) {
|
||||||
// TODO: report a diagnostic if a module with this name was already added
|
val existing = javaModuleFinder.findModule(module.name)
|
||||||
javaModuleFinder.addUserModule(module)
|
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
|
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 {
|
internal class CliJavaModuleFinder(private val jrtFileSystem: VirtualFileSystem?) : JavaModuleFinder {
|
||||||
private val userModules = linkedMapOf<String, JavaModule>()
|
private val userModules = linkedMapOf<String, JavaModule>()
|
||||||
|
|
||||||
/**
|
fun addUserModule(module: JavaModule) {
|
||||||
* @return true if the module was added successfully, false otherwise
|
userModules.putIfAbsent(module.name, module)
|
||||||
*/
|
|
||||||
fun addUserModule(module: JavaModule): Boolean {
|
|
||||||
if (module.name in userModules) return false
|
|
||||||
userModules[module.name] = module
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val allObservableModules: Sequence<JavaModule>
|
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")
|
val b = module("autoB")
|
||||||
module("main", listOf(a, b))
|
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