1
+ /* sbt -- Simple Build Tool
2
+ * Copyright 2008, 2009 Mark Harrah
3
+ */
4
+ package xsbt
5
+
6
+ import dotty .tools ._
7
+ import dotc ._
8
+ import reporting ._
9
+ import core .Contexts ._
10
+
11
+ import xsbti .Maybe
12
+
13
+ object DelegatingReporter {
14
+ def apply (delegate : xsbti.Reporter ) = new DelegatingReporter (delegate)
15
+ }
16
+
17
+ final class DelegatingReporter (delegate : xsbti.Reporter ) extends Reporter
18
+ with UniqueMessagePositions
19
+ with HideNonSensicalMessages {
20
+
21
+ override def printSummary (implicit ctx : Context ): Unit = delegate.printSummary()
22
+
23
+ def doReport (d : Diagnostic )(implicit ctx : Context ): Unit = {
24
+ val severity =
25
+ d match {
26
+ case _ : Reporter .Error => xsbti.Severity .Error
27
+ case _ : Reporter .Warning => xsbti.Severity .Warn
28
+ case _ => xsbti.Severity .Info
29
+ }
30
+ val pos =
31
+ if (d.pos.exists) Some (d.pos)
32
+ else None
33
+
34
+ val file =
35
+ if (d.pos.source.file.exists) {
36
+ val r = d.pos.source.file.file
37
+ if (r == null ) None
38
+ else Some (r)
39
+ }
40
+ else None
41
+
42
+ val offset0 = pos.map(_.point)
43
+
44
+ val position = new xsbti.Position {
45
+ def line : Maybe [Integer ] = maybe(pos.map(_.line))
46
+ def lineContent (): String = pos.map(_.lineContent).getOrElse(" " )
47
+ def offset (): xsbti.Maybe [Integer ] = maybeInt(offset0)
48
+ def pointer (): xsbti.Maybe [Integer ] = offset()
49
+ def pointerSpace (): xsbti.Maybe [String ] = maybe(offset0.map(" " * _))
50
+ def sourceFile (): xsbti.Maybe [java.io.File ] = maybe(file)
51
+ def sourcePath (): xsbti.Maybe [String ] = maybe(file.map(_.getPath))
52
+ }
53
+
54
+ delegate.log(position, d.message, severity)
55
+ }
56
+
57
+ private [this ] def maybe [T ](opt : Option [T ]): Maybe [T ] = opt match {
58
+ case None => Maybe .nothing[T ]
59
+ case Some (s) => Maybe .just[T ](s)
60
+ }
61
+ import java .lang .{ Integer => I }
62
+ private [this ] def maybeInt (opt : Option [Int ]): Maybe [I ] = opt match {
63
+ case None => Maybe .nothing[I ]
64
+ case Some (s) => Maybe .just[I ](s)
65
+ }
66
+ }
0 commit comments