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