Skip to content

Commit dd23668

Browse files
authored
Merge pull request scala#6778 from som-snytt/issue/nowarn
Revert to using ConsoleReporter during spin up
2 parents 9d67389 + 17cd426 commit dd23668

File tree

4 files changed

+37
-16
lines changed

4 files changed

+37
-16
lines changed

src/compiler/scala/tools/nsc/Driver.scala

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package scala
22
package tools.nsc
33

4-
import scala.tools.nsc.reporters.DisplayReporter
5-
import Properties.{ versionMsg, residentPromptString }
6-
import scala.reflect.internal.Reporter
4+
import Properties.{versionMsg, residentPromptString}
5+
import scala.tools.nsc.reporters.Reporter
76
import scala.reflect.internal.util.FakePos
87

98
abstract class Driver {
@@ -40,13 +39,13 @@ abstract class Driver {
4039

4140
def process(args: Array[String]): Boolean = {
4241
val ss = new Settings(scalacError)
43-
reporter = DisplayReporter(ss) // for reporting early config errors, before compiler is constructed
42+
reporter = Reporter(ss)
4443
command = new CompilerCommand(args.toList, ss)
4544
settings = command.settings
4645

4746
if (processSettingsHook()) {
4847
val compiler = newCompiler()
49-
reporter = compiler.reporter // adopt the configured reporter
48+
reporter = compiler.reporter // adopt the compiler's reporter, which may be custom
5049
try {
5150
if (reporter.hasErrors)
5251
reporter.flush()

src/compiler/scala/tools/nsc/Global.scala

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import util.{ClassPath, returning}
1717
import reporters.{Reporter => LegacyReporter}
1818
import scala.reflect.ClassTag
1919
import scala.reflect.internal.{Reporter => InternalReporter}
20-
import scala.reflect.internal.util.{BatchSourceFile, FreshNameCreator, NoSourceFile, ScalaClassLoader, ScriptSourceFile, SourceFile, StatisticsStatics}
20+
import scala.reflect.internal.util.{BatchSourceFile, FreshNameCreator, NoSourceFile, ScriptSourceFile, SourceFile, StatisticsStatics}
2121
import scala.reflect.internal.pickling.PickleBuffer
2222
import symtab.{Flags, SymbolTable, SymbolTrackers}
2323
import symtab.classfile.Pickler
@@ -90,7 +90,7 @@ class Global(var currentSettings: Settings, reporter0: LegacyReporter)
9090
this(new Settings(err => reporter.error(null, err)), reporter)
9191

9292
def this(settings: Settings) =
93-
this(settings, Global.reporter(settings))
93+
this(settings, LegacyReporter(settings))
9494

9595
def picklerPhase: Phase = if (currentRun.isDefined) currentRun.picklerPhase else NoPhase
9696

@@ -1659,15 +1659,8 @@ class Global(var currentSettings: Settings, reporter0: LegacyReporter)
16591659
object Global {
16601660
def apply(settings: Settings, reporter: LegacyReporter): Global = new Global(settings, reporter)
16611661

1662-
def apply(settings: Settings): Global = new Global(settings, reporter(settings))
1662+
def apply(settings: Settings): Global = new Global(settings, LegacyReporter(settings))
16631663

1664-
private def reporter(settings: Settings): LegacyReporter = {
1665-
//val loader = ScalaClassLoader(getClass.getClassLoader) // apply does not make delegate
1666-
val loader = new ClassLoader(getClass.getClassLoader) with ScalaClassLoader
1667-
val res = loader.create[InternalReporter](settings.reporter.value, settings.errorFn)(settings)
1668-
if (res.isInstanceOf[LegacyReporter]) res.asInstanceOf[LegacyReporter]
1669-
else res: LegacyReporter // adaptable
1670-
}
16711664
private object InitPhase extends Phase(null) {
16721665
def name = "<init phase>"
16731666
override def keepsTypeParams = false

src/compiler/scala/tools/nsc/reporters/Reporter.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package scala.tools.nsc
77
package reporters
88

99
import scala.reflect.internal.{ForwardingReporter, Reporter => InternalReporter}
10-
import scala.reflect.internal.util.Position
10+
import scala.reflect.internal.util.{Position, ScalaClassLoader}
1111

1212
/** Report information, warnings and errors.
1313
*
@@ -78,4 +78,15 @@ object Reporter {
7878
new LimitingReporter(settings, reporter)
7979
case _ => reporter
8080
}
81+
82+
/** The usual way to create the configured reporter.
83+
* Errors are reported through `settings.errorFn` and also by throwing an exception.
84+
*/
85+
def apply(settings: Settings): Reporter = {
86+
//val loader = ScalaClassLoader(getClass.getClassLoader) // apply does not make delegate
87+
val loader = new ClassLoader(getClass.getClassLoader) with ScalaClassLoader
88+
val res = loader.create[InternalReporter](settings.reporter.value, settings.errorFn)(settings)
89+
if (res.isInstanceOf[Reporter]) res.asInstanceOf[Reporter]
90+
else res: Reporter // adaptable
91+
}
8192
}

test/files/run/nowarn.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
import scala.tools.nsc.{Driver, Global}
3+
import scala.reflect.internal.util.NoPosition
4+
5+
// ensure that nowarn is respected by the default reporter
6+
7+
class Driven extends Driver {
8+
override protected def processSettingsHook(): Boolean = {
9+
settings.nowarn.value = true
10+
true
11+
}
12+
protected def newCompiler(): Global = Global(settings, reporter)
13+
override protected def doCompile(compiler: Global): Unit = reporter.warning(NoPosition, "I don't do anything.")
14+
def run(): Unit = process(Array("file.scala"))
15+
}
16+
object Test {
17+
def main(args: Array[String]): Unit = new Driven().run()
18+
}

0 commit comments

Comments
 (0)