expecty icon indicating copy to clipboard operation
expecty copied to clipboard

[Scala 3] Bad macro expansion of FQNs that contain packages :

Open Baccata opened this issue 4 years ago • 0 comments

This code

@main
package foo

import com.eed3si9n.expecty.Expecty.assert

@main
def runBad() : Unit = {
  assert(cats.data.Chain(1, 2, 3).size == 3)
}

package cats {
  package data {
    object Chain {
      def apply[A](a: A*) : List[A] = List(a*)
    }
  }
}

leads to the following runtime error :

[error] (run-main-12) java.lang.NoClassDefFoundError: foo/cats
[error] java.lang.NoClassDefFoundError: foo/cats
[error]         at foo.runGood.main(Main.scala:10)
[error]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]         at java.lang.reflect.Method.invoke(Method.java:498)
[error] Caused by: java.lang.ClassNotFoundException: foo.cats
[error]         at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

However this is fine :

assert {
   import cats.data.Chain
   Chain(1, 2, 3).size == 3
}

Baccata avatar Jun 23 '21 09:06 Baccata