summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/CompilationUnits.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-06-10 16:24:37 +0200
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-07-04 15:49:05 +0200
commit98216be3f3e546fc320ab5182ac5c129707db1ce (patch)
tree1c20acf20ecfdfa37dd49ed53d82039af58c9e29 /src/compiler/scala/tools/nsc/CompilationUnits.scala
parentf2b76e80094219db1f72a7a56d02f21bab1fc9eb (diff)
downloadscala-98216be3f3e546fc320ab5182ac5c129707db1ce.tar.gz
scala-98216be3f3e546fc320ab5182ac5c129707db1ce.tar.bz2
scala-98216be3f3e546fc320ab5182ac5c129707db1ce.zip
Move reporting logic into Reporting trait
Move code from Global/SymbolTable to separate Reporting traits to start carving out an interface in scala.reflect.internal.Reporting, with internals in scala.tools.nsc. Reporting is mixed into the cake. It contains a nested class PerRunReporting. Should do the same for debugging/logging. The idea is that CompilationUnit and Global forward all reporting to Reporter. The Reporting trait contains these forwarders, and PerRunReporting, which accumulates warning state during a run. In the process, I slightly changed the behavior of `globalError` in reflect.internal.SymbolTable: it used to abort, weirdly. I assume that was dummy behavior to avoid introducing an abstract method. It's immediately overridden in Global, and I couldn't find any other subclasses, so I don't think the behavior in SymbolTable was ever observed. Provide necessary hooks for scala.reflect.macros.Parsers#parse. See scala/reflect/macros/contexts/Parsers.scala's parse method, which overrides the reporter to detect when parsing goes wrong. This should be refactored, but that goes beyond the scope of this PR. Don't pop empty macro context stack. (Ran into this while reworking -Xfatal-warnings logic.) Fix -Xfatal-warnings behavior (and check files): it wasn't meant to influence warning reporting, except for emitting one final error; if necessary to fail the compile (when warnings but no errors were reported). Warnings should stay warnings. This was refactored in fbbbb22946, but we soon seem to have relapsed. An hour of gitfu did not lead to where it went wrong. Must've been a merge.
Diffstat (limited to 'src/compiler/scala/tools/nsc/CompilationUnits.scala')
-rw-r--r--src/compiler/scala/tools/nsc/CompilationUnits.scala37
1 files changed, 16 insertions, 21 deletions
diff --git a/src/compiler/scala/tools/nsc/CompilationUnits.scala b/src/compiler/scala/tools/nsc/CompilationUnits.scala
index 924bb54ddb..ae1b94dfa1 100644
--- a/src/compiler/scala/tools/nsc/CompilationUnits.scala
+++ b/src/compiler/scala/tools/nsc/CompilationUnits.scala
@@ -123,32 +123,27 @@ trait CompilationUnits { global: Global =>
*/
val icode: LinkedHashSet[icodes.IClass] = new LinkedHashSet
- def reporter = global.reporter
+ // reporter and its forwarded methods
+ def reporter = global.reporter
+ def reporting = currentRun.reporting
- def echo(pos: Position, msg: String) =
- reporter.echo(pos, msg)
+ def echo(pos: Position, msg: String): Unit = reporter.echo(pos, msg)
+ def error(pos: Position, msg: String): Unit = reporter.error(pos, msg)
+ def warning(pos: Position, msg: String): Unit = reporter.warning(pos, msg)
- def error(pos: Position, msg: String) =
- reporter.error(pos, msg)
+ def deprecationWarning(pos: Position, msg: String): Unit = reporting.deprecationWarning(pos, msg)
+ def uncheckedWarning(pos: Position, msg: String): Unit = reporting.uncheckedWarning(pos, msg)
+ def inlinerWarning(pos: Position, msg: String): Unit = reporting.inlinerWarning(pos, msg)
+ def featureWarning(pos: Position, featureName: String, featureDesc: String, featureTrait: Symbol, construct: => String = "",
+ required: Boolean): Unit = reporting.featureWarning(pos, featureName, featureDesc, featureTrait, construct, required)
- def warning(pos: Position, msg: String) =
- reporter.warning(pos, msg)
-
- def deprecationWarning(pos: Position, msg: String) =
- currentRun.deprecationWarnings0.warn(pos, msg)
-
- def uncheckedWarning(pos: Position, msg: String) =
- currentRun.uncheckedWarnings0.warn(pos, msg)
-
- def inlinerWarning(pos: Position, msg: String) =
- currentRun.inlinerWarnings.warn(pos, msg)
-
- def incompleteInputError(pos: Position, msg:String) =
- reporter.incompleteInputError(pos, msg)
+ // repl
+ def incompleteHandled: Boolean = reporting.incompleteHandled
+ def incompleteInputError(pos: Position, msg:String): Unit = reporting.incompleteInputError(pos, msg)
// used by the IDE -- TODO: don't use reporter to communicate comments from parser to IDE!
- def comment(pos: Position, msg: String): Unit =
- reporter.comment(pos, msg)
+ def comment(pos: Position, msg: String): Unit = reporter.comment(pos, msg)
+
/** Is this about a .java source file? */
lazy val isJava = source.file.name.endsWith(".java")