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