tek / splain

better implicit errors for scala
MIT License
370 stars 29 forks source link

case class fields with default values break when compiling with 2.12.3 #12

Closed doolse closed 6 years ago

doolse commented 6 years ago
case class Broken(field: Int = 1)

breaks while:

case class Ok(field: Int)

is fine. Both compile fine with 2.12.2 and below.

The error is:

Error:scalac: Error: Method splain/SplainPlugin$$anon$1.CaseApplyDefaultGetters()Lscala/tools/nsc/typechecker/NamesDefaults$CaseApplyDefaultGetters$; is abstract
java.lang.AbstractMethodError: Method splain/SplainPlugin$$anon$1.CaseApplyDefaultGetters()Lscala/tools/nsc/typechecker/NamesDefaults$CaseApplyDefaultGetters$; is abstract
    at splain.SplainPlugin$$anon$1.CaseApplyDefaultGetters(compat.scala)
    at scala.tools.nsc.typechecker.Namers$Namer.$anonfun$addDefaultGetters$17(Namers.scala:1556)
    at scala.tools.nsc.typechecker.Namers$Namer.$anonfun$addDefaultGetters$7(Namers.scala:1555)
    at scala.tools.nsc.typechecker.Namers$Namer.$anonfun$addDefaultGetters$5(Namers.scala:1465)
    at scala.tools.nsc.typechecker.Namers$Namer.addDefaultGetters(Namers.scala:1461)
    at scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1382)
    at scala.tools.nsc.typechecker.Namers$Namer.memberSig(Namers.scala:1785)
    at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1751)
    at scala.tools.nsc.typechecker.Namers$Namer$MonoTypeCompleter.completeImpl(Namers.scala:836)
    at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete(Namers.scala:1948)
    at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete$(Namers.scala:1946)
    at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:1941)
    at scala.tools.nsc.typechecker.Namers$CompleterWrapper.complete(Namers.scala:1997)
    at scala.tools.nsc.typechecker.Namers$Namer$$anon$4.complete(Namers.scala:614)
    at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1531)
    at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1679)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$6(Typers.scala:3172)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$6$adapted(Typers.scala:3170)
    at scala.Option$WithFilter.foreach(Option.scala:257)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$4(Typers.scala:3170)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$4$adapted(Typers.scala:3168)
    at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:396)
    at scala.tools.nsc.typechecker.Typers$Typer.addSynthetics$1(Typers.scala:3168)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3230)
    at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1983)
    at scala.tools.nsc.typechecker.Typers$Typer.typedModuleDef(Typers.scala:1854)
    at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5503)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5552)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5589)
    at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5619)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5563)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5567)
    at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5650)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$6(Typers.scala:3173)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$6$adapted(Typers.scala:3170)
    at scala.Option$WithFilter.foreach(Option.scala:257)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$4(Typers.scala:3170)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$4$adapted(Typers.scala:3168)
    at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:396)
    at scala.tools.nsc.typechecker.Typers$Typer.addSynthetics$1(Typers.scala:3168)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3230)
    at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5202)
    at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5505)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5552)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5589)
    at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5619)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5563)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5567)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5646)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.apply(Analyzer.scala:102)
    at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:426)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:419)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.$anonfun$run$1(Analyzer.scala:94)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.$anonfun$run$1$adapted(Analyzer.scala:93)
    at scala.collection.Iterator.foreach(Iterator.scala:929)
    at scala.collection.Iterator.foreach$(Iterator.scala:929)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.run(Analyzer.scala:93)
    at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1431)
    at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1416)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:1412)
    at scala.tools.nsc.Global$Run.compile(Global.scala:1515)
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:115)
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:94)
    at xsbt.CompilerInterface.run(CompilerInterface.scala:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:101)
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:47)
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41)
    at org.jetbrains.jps.incremental.scala.local.IdeaIncrementalCompiler.compile(IdeaIncrementalCompiler.scala:32)
    at org.jetbrains.jps.incremental.scala.local.LocalServer.compile(LocalServer.scala:26)
    at org.jetbrains.jps.incremental.scala.remote.Main$.make(Main.scala:68)
    at org.jetbrains.jps.incremental.scala.remote.Main$.nailMain(Main.scala:25)
    at org.jetbrains.jps.incremental.scala.remote.Main.nailMain(Main.scala)
    at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.martiansoftware.nailgun.NGSession.run(NGSession.java:319)
tek commented 6 years ago

I released 0.2.6 compiled against 2.12.3, could you check whether that fixes the problem?

doolse commented 6 years ago

Yes, that works now :+1: Great project btw!