summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/reporters/AbstractReporter.scala
blob: 3e3d07cb92dbd5a59bdd1a6cfaeda9be497baf8f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*     ____ ____  ____ ____  ______                                     *\
**    / __// __ \/ __// __ \/ ____/    SOcos COmpiles Scala             **
**  __\_ \/ /_/ / /__/ /_/ /\_ \       (c) 2002, LAMP/EPFL              **
** /_____/\____/\___/\____/____/                                        **
\*                                                                      */

// $Id$

package scala.tools.nsc.reporters;
import scala.collection.mutable.HashSet;
import scala.tools.nsc.util.Position;

/**
 * This reporter implements filtering.
 */
abstract class AbstractReporter extends Reporter {
  private val positions = new HashSet[Position]();

  def display(pos : Position, msg : String, severity : Severity) : Unit;
  var prompt : Boolean = false;
  var verbose : Boolean = false;
  var nowarn  : Boolean = false;
  def displayPrompt : Unit;

  protected def info0(pos : Position, msg : String, severity : Severity, force : Boolean) : Unit = severity match {
    case INFO    => if (force || verbose) display(pos, msg, severity);
    case WARNING => {
      val hidden = testAndLog(pos);
      if (!nowarn) {
	if (!hidden || prompt) display(pos, msg, severity);
	if (prompt) displayPrompt;
      }
    }
    case ERROR => {
      val hidden = testAndLog(pos);
      if (!hidden || prompt) display(pos, msg, severity);
      if (prompt) displayPrompt;
    }
  }

  //########################################################################
  // Private Methods

  /** Logs a position and returns true if it was already logged. */
  private def testAndLog(pos : Position) : Boolean = {
    if (pos eq null) return false;
    if (pos.column == 0) return false;
    if (positions.contains(pos)) return true;
    positions += (pos);
    return false;
  }

  //########################################################################
}