zio-schema
zio-schema copied to clipboard
java.lang.StackOverflowError on DeriveSchema.gen
Trying to create a serialisable DSL for my project. On using DeriveSchema.gen
on the domain is giving error.
Scastie link
Error
[error] ## Exception when compiling 38 sources to /Users/shreymehta/projects/zio-flow/zio-flow/jvm/target/scala-2.13/classes
[error] java.lang.StackOverflowError
[error] scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1538)
[error] scala.reflect.internal.Symbols$Symbol.tpe_$times(Symbols.scala:1514)
[error] scala.reflect.internal.Symbols$Symbol.typeOfThis(Symbols.scala:2113)
[error] scala.reflect.internal.Types$ThisType.underlying(Types.scala:1404)
[error] scala.reflect.internal.Types$SimpleTypeProxy.isError(Types.scala:148)
[error] scala.reflect.internal.Types$SimpleTypeProxy.isError$(Types.scala:148)
[error] scala.reflect.internal.Types$SingletonType.isError(Types.scala:1104)
[error] scala.reflect.internal.tpe.TypeMaps$ErroneousCollector$.apply(TypeMaps.scala:1121)
[error] scala.reflect.internal.Types$TypeRef.foldOver(Types.scala:2376)
[error] scala.reflect.internal.tpe.TypeMaps$ErroneousCollector$.apply(TypeMaps.scala:1122)
[error] scala.reflect.internal.tpe.TypeMaps$ErroneousCollector$.apply(TypeMaps.scala:1118)
[error] scala.reflect.internal.Types$TypeRef.foldOver(Types.scala:2377)
[error] scala.reflect.internal.tpe.TypeMaps$ErroneousCollector$.apply(TypeMaps.scala:1122)
[error] scala.reflect.internal.tpe.TypeMaps$TypeCollector.collect(TypeMaps.scala:268)
[error] scala.reflect.internal.Types$Type.isErroneous(Types.scala:309)
[error] scala.tools.nsc.typechecker.ContextErrors$TyperContextErrors$TyperErrorGen$.issueError$1(ContextErrors.scala:212)
[error] scala.tools.nsc.typechecker.ContextErrors$TyperContextErrors$TyperErrorGen$.AdaptTypeError(ContextErrors.scala:240)
[error] scala.tools.nsc.typechecker.Typers$Typer.adaptMismatchedSkolems$1(Typers.scala:1091)
[error] scala.tools.nsc.typechecker.Typers$Typer.lastTry$1(Typers.scala:1102)
[error] scala.tools.nsc.typechecker.Typers$Typer.adaptExprNotFunMode$1(Typers.scala:1166)
[error] scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1226)
[error] scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1273)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6008)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:3421)
[error] scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgWithFormal$1(PatternTypers.scala:119)
[error] scala.tools.nsc.typechecker.PatternTypers$PatternTyper.$anonfun$typedArgsForFormals$4(PatternTypers.scala:133)
[error] scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgsForFormals(PatternTypers.scala:133)
[error] scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgsForFormals$(PatternTypers.scala:114)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedArgsForFormals(Typers.scala:203)
[error] scala.tools.nsc.typechecker.Typers$Typer.handleMonomorphicCall$1(Typers.scala:3749)
[error] scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3799)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$13(Typers.scala:3619)
[error] scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:708)
[error] scala.tools.nsc.typechecker.Typers$Typer.tryTupleApply$1(Typers.scala:3619)
[error] scala.tools.nsc.typechecker.Typers$Typer.tryNamesDefaults$1(Typers.scala:3721)
[error] scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3732)
[error] scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:5059)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:5068)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5936)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5993)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:865)
[error] scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:484)
[error] scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1269)
[error] scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1266)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit1(Implicits.scala:871)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit0(Implicits.scala:808)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch.scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$typedImplicit(Implicits.scala:627)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.rankImplicits(Implicits.scala:1219)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.findBest(Implicits.scala:1254)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1311)
[error] scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1731)
[error] scala.tools.nsc.typechecker.Implicits.inferImplicit1(Implicits.scala:112)
[error] scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:92)
[error] scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:89)
[error] scala.tools.nsc.Global$$anon$6.inferImplicit(Global.scala:485)
[error] scala.tools.nsc.typechecker.Implicits.$anonfun$inferImplicit$1(Implicits.scala:143)
[error] scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:143)
[error] scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:141)
[error] scala.tools.nsc.Global$$anon$6.inferImplicit(Global.scala:485)
[error] scala.reflect.macros.contexts.Typers.inferImplicitValue(Typers.scala:56)
[error] scala.reflect.macros.contexts.Typers.inferImplicitValue$(Typers.scala:54)
[error] scala.reflect.macros.contexts.Context.inferImplicitValue(Context.scala:18)
[error] scala.reflect.macros.contexts.Context.inferImplicitValue(Context.scala:18)
[error] magnolia.Magnolia$.$anonfun$gen$22(magnolia.scala:290)
The issue is with deriving a Schema for a type that itself has a Schema as part of it.
Thanks for the report @smehta91! I can't seem to access the scastie link. Would you mind posting the code here?
import zio.schema.{ Schema, DeriveSchema }
object Test {
case class ServerSetting(debug: Boolean)
case class ConfigA(appName: String, sites: List[String], serverSetting: ServerSetting)
case class ConfigB(AppName: String, wlsIds: List[Int], debug: Boolean)
case class SiteMap(cricket: Int, football: Int)
sealed trait Operation[-R, -A, +B]
object Operation {
case class Spec[R, A, B](inputSchema: Schema[A], ops: List[(String, Operation[R, A, Any])], outputSchema: Schema[B])
extends Operation[R, A, B]
}
val configASchema: Schema[ConfigA] = DeriveSchema.gen[ConfigA]
val configBSchema: Schema[ConfigB] = DeriveSchema.gen[ConfigB]
val siteMapSchema: Schema[SiteMap] = DeriveSchema.gen[SiteMap]
val operationSchema: Schema[Operation[SiteMap, ConfigA, ConfigB]] =
DeriveSchema.gen[Operation[SiteMap, ConfigA, ConfigB]]
}
Getting the error while deriving schema for Operation[SiteMap, ConfigA, ConfigB]
does not happen anymore with 1.2.2