Compatibility with 2.8 reporter/position changes

git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@931 d89573ee-9141-11dd-94d4-bdf5e562f29c
This commit is contained in:
dmharrah 2009-08-02 01:06:11 +00:00
parent e798bffc9c
commit 91d05d74c8
1 changed files with 30 additions and 23 deletions

View File

@ -206,11 +206,11 @@ final class Scaladoc(maximumErrors: Int) extends CompilerCore
} }
// The following code is based on scala.tools.nsc.reporters.{AbstractReporter, ConsoleReporter} // The following code is based on scala.tools.nsc.reporters.{AbstractReporter, ConsoleReporter}
// Copyright 2002-2008 LAMP/EPFL // Copyright 2002-2009 LAMP/EPFL
// Original author: Martin Odersky // Original author: Martin Odersky
final class LoggerReporter(maximumErrors: Int, log: Logger) extends scala.tools.nsc.reporters.Reporter final class LoggerReporter(maximumErrors: Int, log: Logger) extends scala.tools.nsc.reporters.Reporter
{ {
import scala.tools.nsc.util.{FakePos,Position} import scala.tools.nsc.util.{FakePos,NoPosition,Position}
private val positions = new scala.collection.mutable.HashMap[Position, Severity] private val positions = new scala.collection.mutable.HashMap[Position, Severity]
def error(msg: String) { error(FakePos("scalac"), msg) } def error(msg: String) { error(FakePos("scalac"), msg) }
@ -239,29 +239,36 @@ final class LoggerReporter(maximumErrors: Int, log: Logger) extends scala.tools.
private def print(level: Level.Value, posIn: Position, msg: String) private def print(level: Level.Value, posIn: Position, msg: String)
{ {
if(posIn == null) // the implicits keep source compatibility with the changes in 2.8 : Position.{source,line,column} are no longer Options
log.log(level, msg) implicit def anyToOption[T <: AnyRef](t: T): Option[T] = Some(t)
else implicit def intToOption(t: Int): Option[Int] = Some(t)
val pos =
posIn match
{
case null | NoPosition => NoPosition
case x: FakePos => x
case x =>
posIn.inUltimateSource(posIn.source.get)
}
pos match
{ {
val pos = posIn.inUltimateSource(posIn.source.getOrElse(null)) case NoPosition => log.log(level, msg)
def message = case FakePos(fmsg) => log.log(level, fmsg+" "+msg)
{ case _ =>
val sourcePrefix = val sourcePrefix = pos.source.map(_.file.path).getOrElse("")
pos match
{
case FakePos(msg) => msg + " "
case _ => pos.source.map(_.file.path).getOrElse("")
}
val lineNumberString = pos.line.map(line => ":" + line + ":").getOrElse(":") + " " val lineNumberString = pos.line.map(line => ":" + line + ":").getOrElse(":") + " "
sourcePrefix + lineNumberString + msg log.log(level, sourcePrefix + lineNumberString + msg)
} if (!pos.line.isEmpty)
log.log(level, message) {
if (!pos.line.isEmpty) val lineContent = pos.lineContent.stripLineEnd
{ log.log(level, lineContent) // source line with error/warning
log.log(level, pos.lineContent.stripLineEnd) // source line with error/warning for(offset <- pos.offset; src <- pos.source)
for(column <- pos.column if column > 0) // pointer to the column position of the error/warning {
log.log(level, (" " * (column-1)) + '^') val pointer = offset - src.lineToOffset(src.offsetToLine(offset))
} val pointerSpace = lineContent.take(pointer).map { case '\t' => '\t'; case x => ' ' }
log.log(level, pointerSpace.mkString + "^") // pointer to the column position of the error/warning
}
}
} }
} }
override def reset = override def reset =