summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/Global.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/Global.scala')
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 8d72fd76bd..a54b92cef8 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -96,6 +96,20 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
def erasurePhase: Phase = if (currentRun.isDefined) currentRun.erasurePhase else NoPhase
+ /* Override `newStubSymbol` defined in `SymbolTable` to provide us access
+ * to the last tree to typer, whose position is the trigger of stub errors. */
+ override def newStubSymbol(owner: Symbol,
+ name: Name,
+ missingMessage: String,
+ isPackage: Boolean = false): Symbol = {
+ val stubSymbol = super.newStubSymbol(owner, name, missingMessage, isPackage)
+ val stubErrorPosition = {
+ val lastTreeToTyper = analyzer.lastTreeToTyper
+ if (lastTreeToTyper != EmptyTree) lastTreeToTyper.pos else stubSymbol.pos
+ }
+ stubSymbol.setPos(stubErrorPosition)
+ }
+
// platform specific elements
protected class GlobalPlatform extends {