Open
Description
Compiler version
3.4.0-RC1-bin-20231006-b1ccc6a-NIGHTLY
Minimized code
a.scala
import language.experimental.relaxedExtensionImports
class A
extension (a: A)
def f = "a"
b.scala
import language.experimental.relaxedExtensionImports
class B
extension (b: B)
def f = "b"
main.scala
import language.experimental.relaxedExtensionImports
@main def main() =
val a = A()
println(a.f)
Replit Link: https://replit.com/@replitit1/TubbyHighlevelCoordinate
Output
Compile error (edit: when compiled together)
[error] -- [E161] Naming Error: /home/runner/TubbyHighlevelCoordinate/b.scala:6:6 ------
[error] 6 | def f = "b"
[error] | ^^^^^^^^^^^
[error] |f is already defined as method f in /home/runner/TubbyHighlevelCoordinate/a.scala
[error] |
[error] |Note that overloaded methods must all be defined in the same group of toplevel definitions
[error] one error found
Edit: when compiled separately (a, then b, then main) - another error:
-- [E008] Not Found Error: main.scala:6:12 -------------------------------------
6 | println(a.f)
| ^^^
| value f is not a member of example.A.
| An extension method was tried, but could not be fully constructed:
|
| example.f(a)
|
| failed with:
|
| Found: (a : example.A)
| Required: example.B
1 error found
Expectation
a
#16920 fixed this issue when extension methods with same names are imported from different objects, but it doesn't seem to work when extensions are defined at top level across multiple files.