fthomas / fthomas/refined

Creating new refinement type crashes with: exception during macro expansion

Open
#448 5 comments 1 reaction 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.