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
+ def doReport (d : Diagnostic )(implicit ctx : Context ): Unit = {
22
+ println(" doReport " + d.toString)
23
+ val severity =
24
+ d match {
25
+ case _ : Reporter .Error => xsbti.Severity .Error
26
+ case _ : Reporter .Warning => xsbti.Severity .Warn
27
+ case _ => xsbti.Severity .Info
28
+ }
29
+ val pos =
30
+ if (d.pos.exists) Some (d.pos)
31
+ else None
32
+
33
+ val file =
34
+ if (d.pos.source.file.exists) {
35
+ val r = d.pos.source.file.file
36
+ if (r == null ) None
37
+ else Some (r)
38
+ }
39
+ else None
40
+
41
+ val offset0 = pos.map(_.point)
42
+
43
+ val position = new xsbti.Position {
44
+ def line : Maybe [Integer ] = maybe(pos.map(_.line))
45
+ def lineContent (): String = pos.map(_.lineContent).getOrElse(" " )
46
+ def offset (): xsbti.Maybe [Integer ] = maybeInt(offset0)
47
+ def pointer (): xsbti.Maybe [Integer ] = offset()
48
+ def pointerSpace (): xsbti.Maybe [String ] = maybe(offset0.map(" " * _))
49
+ def sourceFile (): xsbti.Maybe [java.io.File ] = maybe(file)
50
+ def sourcePath (): xsbti.Maybe [String ] = maybe(file.map(_.getPath))
51
+ }
52
+
53
+ delegate.log(position, d.message, severity)
54
+ }
55
+
56
+ private [this ] def maybe [T ](opt : Option [T ]): Maybe [T ] = opt match {
57
+ case None => Maybe .nothing[T ]
58
+ case Some (s) => Maybe .just[T ](s)
59
+ }
60
+ import java .lang .{ Integer => I }
61
+ private [this ] def maybeInt (opt : Option [Int ]): Maybe [I ] = opt match {
62
+ case None => Maybe .nothing[I ]
63
+ case Some (s) => Maybe .just[I ](s)
64
+ }
65
+ }
0 commit comments