AssertionError from scala.tools.nsc.typechecker.SuperAccessors on Build
real branch : wip_exp_backport
scala version : 2.8.1.final
clean as no effect.
Same error after, fixing all errors repported by build from command line (maven), and restart the IDE
Same error but on an other part of the code if I comment the method with the code indicated.
As the build failed (presentation and builder), I've got a useless ide :
copy of the file :
The source where the assertion is:
https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_1_final/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
scala version : 2.8.1.final
clean as no effect.
Same error after, fixing all errors repported by build from command line (maven), and restart the IDE
Same error but on an other part of the code if I comment the method with the code indicated.
As the build failed (presentation and builder), I've got a useless ide :
- no error reporting
- can't run any code (As Scala nor As Test)
java.lang.AssertionError: assertion failed: react(<empty> match {
case Done((lastMonitor @ _)) => if (lastMonitor.runId.$eq$eq(_lastRunId))
{
lastMonitor.info("DONE");
_lastNotifications = FilesNotificationEmpty
}
else
()
case SourceChange((n @ _)) => {
_lastNotifications = FilesNotificationHelper.merge(_lastNotifications, n);
_runCnt.$plus$eq(1);
_lastRunId = buildersChain.label.$plus("-").$plus(_runCnt);
this.$bang(NewRun(_lastRunId))
}
case OutputChange((n @ _)) => _lastNotifications = FilesNotificationHelper.merge(_lastNotifications, n)
case (x @ (_: NewRun)) => if (x.runId.$bang$eq(_lastRunId))
()
else
run(x)
case (x @ (_: RunBuilder)) => if (x.previousMonitor.runId.$bang$eq(_lastRunId))
x.previousMonitor.info("aborted, newer run started")
else
runBuilder(x, _lastNotifications)
case (x @ _) => println("ignore ".$plus(x))
})
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:227)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$$anonfun$transformArgs$1.apply(SuperAccessors.scala:51)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$$anonfun$transformArgs$1.apply(SuperAccessors.scala:51)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:206)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:206)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:206)
at scala.collection.immutable.List.map(List.scala:45)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transformArgs(SuperAccessors.scala:51)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:228)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$5.apply(Trees.scala:761)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$5.apply(Trees.scala:759)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:758)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:234)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:851)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:851)
at scala.collection.immutable.List.loop$1(List.scala:115)
at scala.collection.immutable.List.mapConserve(List.scala:132)
at scala.tools.nsc.ast.Trees$Transformer.transformTrees(Trees.scala:851)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$$anonfun$4.apply(SuperAccessors.scala:180)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$$anonfun$4.apply(SuperAccessors.scala:180)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:180)
at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:853)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:745)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:744)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:743)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:167)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:869)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:867)
at scala.collection.immutable.List.loop$1(List.scala:115)
at scala.collection.immutable.List.mapConserve(List.scala:132)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:867)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:739)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:739)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:738)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:49)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:51)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:51)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:234)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:869)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:867)
at scala.collection.immutable.List.loop$1(List.scala:115)
at scala.collection.immutable.List.mapConserve(List.scala:132)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:867)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:739)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:739)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:738)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:49)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:51)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:51)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:877)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.atOwner(SuperAccessors.scala:248)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:234)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:870)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:282)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:282)
at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:282)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:256)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:256)
at scala.collection.Iterator$class.foreach(Iterator.scala:631)
at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:304)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:256)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:741)
at scala.tools.nsc.Global$Run.compileFiles(Global.scala:811)
at scala.tools.nsc.interactive.RefinedBuildManager.update0$1(RefinedBuildManager.scala:127)
at scala.tools.nsc.interactive.RefinedBuildManager.update(RefinedBuildManager.scala:186)
at scala.tools.nsc.interactive.RefinedBuildManager.update(RefinedBuildManager.scala:93)
at scala.tools.eclipse.EclipseBuildManager.build(EclipseBuildManager.scala:125)
at scala.tools.eclipse.ScalaProject.build(ScalaProject.scala:459)
at scala.tools.eclipse.ScalaBuilder$$anonfun$build$1.apply(ScalaBuilder.scala:81)
at scala.tools.eclipse.ScalaBuilder$$anonfun$build$1.apply(ScalaBuilder.scala:38)
at scala.tools.eclipse.internal.logging.Tracer$.timeOf(Tracer.scala:25)
at scala.tools.eclipse.ScalaBuilder.build(ScalaBuilder.scala:38)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:627)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:140)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
copy of the file :
package net_alchim31_reabuilder
package impl0
import net_alchim31_utils.MiniLogger
import net_alchim31_reabuilder.api._
import scala.actors.Reactor
object BuildersChainRunner {
sealed trait Event
case class SourceChange(notification : FilesNotification) extends Event
case class OutputChange(notification : FilesNotification) extends Event
// private internal events
private[impl0] case class NewRun(runId : String) extends Event
private[impl0] case class RunBuilder(builder : Builder, previousMonitor : RunMonitor, tailChain : List[Builder]) extends Event
private[impl0] case class Done(lastMonitor : RunMonitor) extends Event
}
class BuildersChainRunner(val buildersChain : BuildersChain, val untilLabel : Option[String] = None) extends Reactor[BuildersChainRunner.Event] {
import BuildersChainRunner._
import net_alchim31_reabuilder.helpers.FilesNotificationHelper
//TODO check untilLabel exists into chain
private var _runCnt = 0
private var _lastRunId : String = ""
private var _lastNotifications : FilesNotification = FilesNotificationEmpty
def act() = loop {
react {
case Done(lastMonitor) => {
if (lastMonitor.runId == _lastRunId) {
lastMonitor.info("DONE")
_lastNotifications = FilesNotificationEmpty
}
}
case SourceChange(n) => {
// if there is a currently running chain, changing the _lastRunId => stop of the run, and the new run will redo work of aborted run
_lastNotifications = FilesNotificationHelper.merge(_lastNotifications, n)
_runCnt += 1
_lastRunId = buildersChain.label + "-" + _runCnt
// send an event after updated _lastRunId, then waiting request for previous/other runId will be consumed
this ! NewRun(_lastRunId)
}
case OutputChange(n) => {
_lastNotifications = FilesNotificationHelper.merge(_lastNotifications, n)
}
case x : NewRun => {
if (x.runId != _lastRunId) {
//TODO log info("aborted, newer run started")
} else {
run(x)
}
}
case x : RunBuilder => {
if (x.previousMonitor.runId != _lastRunId) {
x.previousMonitor.info("aborted, newer run started")
} else {
// acquire change source+output since last builder run
runBuilder(x, _lastNotifications)
}
}
case x => println("ignore " + x) //TODO use regular logger
}
}
private def runBuilder(args : RunBuilder, notification : FilesNotification) {
import args._
val buildMonitor = previousMonitor.begin(builder)
try {
val buildNotif = FilesNotificationHelper.filterForAccept(notification, builder.pathAcceptor)
buildNotif.isEmpty match {
case true => buildMonitor.info("skipped : no change")
case false => builder.build(buildNotif, buildMonitor)
}
} catch {
case t => buildMonitor.error(Some(t), "unhandled exception raised by builder")
} finally {
buildMonitor.end(builder)
}
(buildMonitor.hasError || untilLabel.map( _ == builder.label).getOrElse(false) || tailChain.isEmpty) match {
case true => this ! Done(buildMonitor)
case false => tailChain match {
case Nil => this ! Done(buildMonitor)
case nextBuilder :: nextTailChain => {
this ! RunBuilder(nextBuilder, buildMonitor, nextTailChain)
}
}
}
}
private def run(args : NewRun) {
import args._
buildersChain.chain match {
case Nil => //DONE warn user about empty chain
case nextBuilder :: nextTailChain => {
val monitor = new RunMonitor0(runId, Some(nextBuilder), Nil)
this ! RunBuilder(nextBuilder, monitor, nextTailChain)
}
}
}
}
class RunMonitor0(val runId : String, builder : Option[Builder] = None, val previousBuilders : List[Builder] = Nil) extends RunMonitor {
private lazy val _logger = new MiniLogger(taskName + "." + runId)
private var _errorCounter = 0
def taskName : String = builder.map(_.label).getOrElse("x")
// logging
def info(msg : String) = _logger.info(msg)
def warn(t : Option[Throwable] = None, msg : String) = _logger.warn(t, msg)
def error(t : Option[Throwable] = None, msg : String) = {
_errorCounter +=1
_logger.error(t, msg)
}
def hasError : Boolean = _errorCounter > 0
// progression
/**
* !Do Nothing
* {@inherited}
*/
def worked(work : Int = 1, total : Int = 1) : RunMonitor = this
def begin(v : Builder) : RunMonitor = {
val b = new RunMonitor0(runId, Some(v), builder.map(_ :: previousBuilders).getOrElse(previousBuilders))
b.info("begin")
b
}
def end(b : Builder) : RunMonitor = {
this.info("end with " + _errorCounter + " error(s)")
this
}
}
object FilesNotificationEmpty extends FilesNotification {
def modified = Seq.empty[FilePath]
def created = Seq.empty[FilePath]
def deleted = Seq.empty[FilePath]
def renamed = Seq.empty[(FilePath,FilePath)]
}
class FilesNotification0(
val modified : Seq[FilePath] = Nil,
val created : Seq[FilePath] = Nil,
val deleted : Seq[FilePath] = Nil,
val renamed : Seq[(FilePath,FilePath)] = Nil
) extends FilesNotification
class FilePath0(path : String, val root : Option[FilePath] = None) extends FilePath {
lazy val rpath : String = path.replace('\\', '/')
}
The source where the assertion is:
https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_1_final/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
143 try tree match {
...
226 case Apply(fn, args) =>
227 assert(fn.tpe != null, tree)
228 treeCopy.Apply(tree, transform(fn), transformArgs(args, fn.tpe.params))
...
Leave a comment
I would like to know if there is some possible workaround (suggestion), I can try to implement in nsc.interactive or in sdt.core ?
I import the "failing" project into my Test eclipse workspace for scala-ide. And was not able to reproduce (I've got other error).
/davidB
I import the "failing" project into my Test eclipse workspace for scala-ide. And was not able to reproduce (I've got other error).
/davidB
Hubert, can you please have a look?
on 2011-01-03 15:32 *
By Hubert Plociniczak
David, is there any chance I can also get the other sources that are needed to compile this code? (You import some other packages).
on 2011-01-03 15:56 *
By David Bernard
Yes, I just share the project into github https://github.com/davidB/reabuilder
As this issue block me, I did some change in the EclipseBuilder/ScalaProject in the branch (order of clean). Since I no longer have the this issue ( => hard/impossible to debug for you, sorry) but I've got
I define one package or package object per file
to compile (for your test), you don't need maven and other dependencies, ONLY scala-library-2.8.1.jar + api.scala and impl0.scala
Thanks for your help
As this issue block me, I did some change in the EclipseBuilder/ScalaProject in the branch (order of clean). Since I no longer have the this issue ( => hard/impossible to debug for you, sorry) but I've got
api is already defined as object api api.scala
cli is already defined as object cli cli.scala
helpers is already defined as object helpers helpers.scala
impl0 is already defined as object impl0 impl0.scala
I define one package or package object per file
to compile (for your test), you don't need maven and other dependencies, ONLY scala-library-2.8.1.jar + api.scala and impl0.scala
Thanks for your help
Updating tickets (#1000199, #1000200, #1000201, #1000204, #1000205, #1000209, #1000210, #1000211, #1000212, #1000215, #1000217, #1000218, #1000220, #1000222, #1000226, #1000227, #1000228, #1000230, #1000231, #1000232, #1000233, #1000235, #1000236, #1000237, #1000239, #1000240, #1000241, #1000242, #1000243, #1000244, #1000248, #1000249, #1000252, #1000253, #1000254, #1000255, #1000256, #1000258, #1000259, #1000032, #1000059, #1000062, #1000163, #1000197, #1000216, #1000221, #1000224, #1000121, #1000175, #1000219, #1000251, #1000069, #1000195, #1000213, #1000223, #1000006, #1000021, #1000038, #1000048, #1000051, #1000052, #1000075, #1000103, #1000109, #1000115, #1000119, #1000156, #1000186, #1000207, #1000238, #1000262, #1000263, #380, #389, #683, #1238, #1331, #1635, #1645, #1715, #1729, #1744, #1783, #1839, #1869, #1885, #1890, #1902, #1918, #1919, #1924, #1925, #1946, #1964, #1991, #2131, #2233, #2342, #2348, #2408)