scala.tools.nsc.reporters.Reporter.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scala-compiler Show documentation
Show all versions of scala-compiler Show documentation
Compiler for the SubScript extension of the Scala Programming Language
The newest version!
/* NSC -- new Scala compiler
* Copyright 2002-2013 LAMP/EPFL
* @author Martin Odersky
*/
package scala.tools.nsc
package reporters
import scala.reflect.internal.util._
/** Report information, warnings and errors.
*
* This describes the internal interface for issuing information, warnings and errors.
* The only abstract method in this class must be info0.
*
* TODO: Move external clients (sbt/ide/partest) to reflect.internal.Reporter,
* and remove this class.
*/
abstract class Reporter extends scala.reflect.internal.Reporter {
/** Informational messages. If `!force`, they may be suppressed. */
final def info(pos: Position, msg: String, force: Boolean): Unit = info0(pos, msg, INFO, force)
/** For sending a message which should not be labeled as a warning/error,
* but also shouldn't require -verbose to be visible.
*/
def echo(msg: String): Unit = info(NoPosition, msg, force = true)
// overridden by sbt, IDE -- should not be in the reporting interface
// (IDE receives comments from ScaladocAnalyzer using this hook method)
// TODO: IDE should override a hook method in the parser instead
def comment(pos: Position, msg: String): Unit = {}
// used by sbt (via unit.cancel) to cancel a compile (see hasErrors)
// TODO: figure out how sbt uses this, come up with a separate interface for controlling the build
var cancelled: Boolean = false
override def hasErrors: Boolean = super.hasErrors || cancelled
override def reset(): Unit = {
super.reset()
cancelled = false
}
// the below is copy/pasted from ReporterImpl for now
// partest expects this inner class
// TODO: rework partest to use the scala.reflect.internal interface,
// remove duplication here, and consolidate reflect.internal.{ReporterImpl & ReporterImpl}
class Severity(val id: Int)(name: String) { var count: Int = 0 ; override def toString = name}
object INFO extends Severity(0)("INFO")
object WARNING extends Severity(1)("WARNING")
// reason for copy/paste: this is used by partest (must be a val, not an object)
// TODO: use count(ERROR) in scala.tools.partest.nest.DirectCompiler#errorCount, rather than ERROR.count
lazy val ERROR = new Severity(2)("ERROR")
def count(severity: Severity): Int = severity.count
def resetCount(severity: Severity): Unit = severity.count = 0
}