Creating new refinement type crashes with: exception during macro expansion
- Dominant language
- Scala
- Stars
- 1.7k
- Forks
- 152
- Avg merge
- 1h 20m
- Merged PRs (30d)
- 6
Description
I created a [simple project](https://github.com/umbreak/refine-test) which reproduces that error.
When defining my own refined type and using it in the code it fails with the following error at `compile` time:
```
[error].../Const.scala:6:32: exception during macro expansion:
[error] java.lang.ClassNotFoundException: com.test.refined.Refinements$
[error] at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:64)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error] at __wrapper$3$b819929bb64041e38491d57bb6d81ca3.__wrapper$3$b819929bb64041e38491d57bb6d81ca3$.wrapper(:6)
[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] at scala.tools.reflect.ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal.$anonfun$compile$11(ToolBoxFactory.scala:279)
[error] at scala.tools.reflect.ToolBoxFactory$ToolBoxImpl.eval(ToolBoxFactory.scala:448)
[error] at scala.reflect.macros.contexts.Evals.eval(Evals.scala:20)
[error] at scala.reflect.macros.contexts.Evals.eval$(Evals.scala:14)
[error] at scala.reflect.macros.contexts.Context.eval(Context.scala:6)
[error] at eu.timepit.refined.macros.MacroUtils.$anonfun$eval$1(MacroUtils.scala:24)
[error] at scala.Option.getOrElse(Option.scala:121)
[error] at eu.timepit.refined.macros.MacroUtils.tryN(MacroUtils.scala:28)
[error] at eu.timepit.refined.macros.MacroUtils.tryN$(MacroUtils.scala:27)
[error] at eu.timepit.refined.macros.RefineMacro.tryN(RefineMacro.scala:11)
[error] at eu.timepit.refined.macros.MacroUtils.eval(MacroUtils.scala:24)
[error] at eu.timepit.refined.macros.MacroUtils.eval$(MacroUtils.scala:17)
[error] at eu.timepit.refined.macros.RefineMacro.eval(RefineMacro.scala:11)
[error] at eu.timepit.refined.macros.RefineMacro.$anonfun$validateInstance$1(RefineMacro.scala:57)
[error] at scala.Option.getOrElse(Option.scala:121)
[error] at eu.timepit.refined.macros.RefineMacro.validateInstance(RefineMacro.scala:57)
[error] at eu.timepit.refined.macros.RefineMacro.impl(RefineMacro.scala:27)
[error] val someCurie = Curie("one", "http://example.com/a")
```
The error seems to be related to the fact that when [Const object](https://github.com/umbreak/refine-test/blob/master/src/main/scala/com/test/refined/Const.scala) gets called, apparently [Refinements](https://github.com/umbreak/refine-test/blob/master/src/main/scala/com/test/refined/Refinements.scala) is not compiled yet.
I could fix it by separating the custom refinements into another module, as shown in [this branch](https://github.com/umbreak/refine-test/tree/fix).
However...that seems overkilling. Is there a better way to deal with this?
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.