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