blob: d8f07fb2e5c0ef9519bfdb070e9883e1efbb3a55 (
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package scala.tools
package reflect
import scala.tools.nsc.reporters._
import scala.tools.nsc.Settings
import scala.reflect.ClassTag
trait FrontEnds extends scala.reflect.api.FrontEnds {
type Position = scala.reflect.internal.util.Position
def mkConsoleFrontEnd(minSeverity: Int = 1): FrontEnd = {
val settings = new Settings()
if (minSeverity <= 0) settings.verbose.value = true
if (minSeverity > 1) settings.nowarn.value = true
wrapReporter(new ConsoleReporter(settings))
}
abstract class FrontEndToReporterProxy(val frontEnd: FrontEnd) extends AbstractReporter {
import frontEnd.{Severity => ApiSeverity}
val API_INFO = frontEnd.INFO
val API_WARNING = frontEnd.WARNING
val API_ERROR = frontEnd.ERROR
type NscSeverity = Severity
val NSC_INFO = INFO
val NSC_WARNING = WARNING
val NSC_ERROR = ERROR
def display(pos: Position, msg: String, nscSeverity: NscSeverity): Unit =
frontEnd.log(pos, msg, nscSeverity match {
case NSC_INFO => API_INFO
case NSC_WARNING => API_WARNING
case NSC_ERROR => API_ERROR
})
def displayPrompt(): Unit =
frontEnd.interactive()
}
def wrapFrontEnd(frontEnd: FrontEnd): Reporter = new FrontEndToReporterProxy(frontEnd) {
val settings = new Settings()
settings.verbose.value = true
settings.nowarn.value = false
}
class ReporterToFrontEndProxy(val reporter: Reporter) extends FrontEnd {
val API_INFO = INFO
val API_WARNING = WARNING
val API_ERROR = ERROR
override def hasErrors = reporter.hasErrors
override def hasWarnings = reporter.hasWarnings
def display(info: Info): Unit = info.severity match {
case API_INFO => reporter.info(info.pos, info.msg, false)
case API_WARNING => reporter.warning(info.pos, info.msg)
case API_ERROR => reporter.error(info.pos, info.msg)
}
def interactive(): Unit = reporter match {
case reporter: AbstractReporter => reporter.displayPrompt()
case _ => // do nothing
}
override def flush(): Unit = {
super.flush()
reporter.flush()
}
override def reset(): Unit = {
super.reset()
reporter.reset()
}
}
def wrapReporter(reporter: Reporter): FrontEnd = new ReporterToFrontEndProxy(reporter)
}
|