@@ -14,8 +14,9 @@ import java.nio.charset.{Charset, CharsetDecoder, IllegalCharsetNameException, U
14
14
import scala .collection .{immutable , mutable }
15
15
import io .{AbstractFile , Path , SourceReader }
16
16
import util .{ClassPath , returning }
17
+ import reporters .{Reporter => LegacyReporter }
17
18
import scala .reflect .ClassTag
18
- import scala .reflect .internal .Reporter
19
+ import scala .reflect .internal .{ Reporter => InternalReporter }
19
20
import scala .reflect .internal .util .{BatchSourceFile , FreshNameCreator , NoSourceFile , ScalaClassLoader , ScriptSourceFile , SourceFile , StatisticsStatics }
20
21
import scala .reflect .internal .pickling .PickleBuffer
21
22
import symtab .{Flags , SymbolTable , SymbolTrackers }
@@ -34,7 +35,7 @@ import scala.tools.nsc.ast.{TreeGen => AstTreeGen}
34
35
import scala .tools .nsc .classpath ._
35
36
import scala .tools .nsc .profile .Profiler
36
37
37
- class Global (var currentSettings : Settings , reporter0 : Reporter )
38
+ class Global (var currentSettings : Settings , reporter0 : LegacyReporter )
38
39
extends SymbolTable
39
40
with CompilationUnits
40
41
with Plugins
@@ -76,29 +77,21 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
76
77
77
78
override def settings = currentSettings
78
79
79
- private [this ] var currentReporter : Reporter = { reporter = reporter0 ; currentReporter }
80
+ private [this ] var currentReporter : LegacyReporter = { reporter = reporter0 ; currentReporter }
80
81
81
- def reporter : Reporter = currentReporter
82
- def reporter_= (newReporter : Reporter ): Unit =
83
- currentReporter = newReporter match {
84
- case _ : reporters.ConsoleReporter | _ : reporters.DefaultReporter | _ : reporters.LimitingReporter => newReporter
85
- case _ if settings.maxerrs.isSetByUser && settings.maxerrs.value < settings.maxerrs.default =>
86
- new reporters.LimitingReporter (settings, newReporter)
87
- case _ => newReporter
88
- }
89
- def reporter_= (oldReporter : reporters.Reporter ): Unit = reporter_=(oldReporter.asInstanceOf [Reporter ])
82
+ def reporter : LegacyReporter = currentReporter
83
+ // enforce maxerrs if necessary
84
+ def reporter_= (newReporter : LegacyReporter ): Unit = currentReporter = LegacyReporter .limitedReporter(settings, newReporter)
90
85
91
86
/** Switch to turn on detailed type logs */
92
87
var printTypings = settings.Ytyperdebug .value
93
88
94
- def this (reporter : Reporter ) =
89
+ def this (reporter : LegacyReporter ) =
95
90
this (new Settings (err => reporter.error(null , err)), reporter)
96
91
97
92
def this (settings : Settings ) =
98
93
this (settings, Global .reporter(settings))
99
94
100
- def this (settings : Settings , reporter : reporters.Reporter ) = this (settings, reporter.asInstanceOf [Reporter ])
101
-
102
95
def picklerPhase : Phase = if (currentRun.isDefined) currentRun.picklerPhase else NoPhase
103
96
104
97
def erasurePhase : Phase = if (currentRun.isDefined) currentRun.erasurePhase else NoPhase
@@ -261,10 +254,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
261
254
// TODO: this is all very broken (only works for scaladoc comments, not regular ones)
262
255
// --> add hooks to parser and refactor Interactive global to handle comments directly
263
256
// in any case don't use reporter for parser hooks
264
- reporter match {
265
- case hooker : reporters.Reporter => hooker.comment(pos, comment)
266
- case _ => ()
267
- }
257
+ reporter.comment(pos, comment)
268
258
}
269
259
270
260
/** Register new context; called for every created context
@@ -344,7 +334,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
344
334
}
345
335
346
336
def loadReader (name : String ): Option [SourceReader ] = {
347
- def ccon = Class .forName(name).getConstructor(classOf [CharsetDecoder ], classOf [Reporter ])
337
+ def ccon = Class .forName(name).getConstructor(classOf [CharsetDecoder ], classOf [InternalReporter ])
348
338
349
339
try Some (ccon.newInstance(charset.newDecoder(), reporter).asInstanceOf [SourceReader ])
350
340
catch { case ex : Throwable =>
@@ -401,10 +391,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
401
391
402
392
/** Is current phase cancelled on this unit? */
403
393
def cancelled (unit : CompilationUnit ) = {
404
- val isCanceled = reporter match {
405
- case cancelable : reporters.Reporter => cancelable.cancelled
406
- case _ => false
407
- }
394
+ val isCanceled = reporter.cancelled
408
395
// run the typer only if in `createJavadoc` mode
409
396
val maxJavaPhase = if (createJavadoc) currentRun.typerPhase.id else currentRun.namerPhase.id
410
397
isCanceled || unit.isJava && this .id > maxJavaPhase
@@ -1276,10 +1263,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
1276
1263
}
1277
1264
1278
1265
// for sbt
1279
- def cancel (): Unit = reporter match {
1280
- case cancelable : reporters.Reporter => cancelable.cancelled = true
1281
- case _ => ()
1282
- }
1266
+ def cancel (): Unit = reporter.cancelled = true
1283
1267
1284
1268
private def currentProgress = (phasec * size) + unitc
1285
1269
private def totalProgress = (phaseDescriptors.size - 1 ) * size // -1: drops terminal phase
@@ -1669,14 +1653,16 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
1669
1653
}
1670
1654
1671
1655
object Global {
1672
- def apply (settings : Settings , reporter : Reporter ): Global = new Global (settings, reporter)
1656
+ def apply (settings : Settings , reporter : LegacyReporter ): Global = new Global (settings, reporter)
1673
1657
1674
1658
def apply (settings : Settings ): Global = new Global (settings, reporter(settings))
1675
1659
1676
- private def reporter (settings : Settings ): Reporter = {
1660
+ private def reporter (settings : Settings ): LegacyReporter = {
1677
1661
// val loader = ScalaClassLoader(getClass.getClassLoader) // apply does not make delegate
1678
1662
val loader = new ClassLoader (getClass.getClassLoader) with ScalaClassLoader
1679
- loader.create[Reporter ](settings.reporter.value, settings.errorFn)(settings)
1663
+ val res = loader.create[InternalReporter ](settings.reporter.value, settings.errorFn)(settings)
1664
+ if (res.isInstanceOf [LegacyReporter ]) res.asInstanceOf [LegacyReporter ]
1665
+ else res : LegacyReporter // adaptable
1680
1666
}
1681
1667
private object InitPhase extends Phase (null ) {
1682
1668
def name = " <init phase>"
0 commit comments