diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2017-03-27 17:11:09 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-27 17:11:09 -0700 |
commit | 03d5f4ee9242f048e86ad9196740b04852c3b738 (patch) | |
tree | 2f629f7e8cd6bc22bf839516e36a9d631e9351b9 /src/reflect/scala/reflect/internal/Symbols.scala | |
parent | 99f41a15d16be6707b6c33b5a16093e016db81eb (diff) | |
parent | 9cfa239e776c2ce6bd7447fd9de8436c5fe167ab (diff) | |
download | scala-03d5f4ee9242f048e86ad9196740b04852c3b738.tar.gz scala-03d5f4ee9242f048e86ad9196740b04852c3b738.tar.bz2 scala-03d5f4ee9242f048e86ad9196740b04852c3b738.zip |
Merge pull request #5804 from jvican/stub-errors-2.11.8
Backport 2.11.9: Improve stub error messages (SCP-009 proposal)
Diffstat (limited to 'src/reflect/scala/reflect/internal/Symbols.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Symbols.scala | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 6116952c70..16b2a23c23 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -182,6 +182,17 @@ trait Symbols extends api.Symbols { self: SymbolTable => private[reflect] case class SymbolKind(accurate: String, sanitized: String, abbreviation: String) + protected def newStubSymbol(owner: Symbol, + name: Name, + missingMessage: String, + isPackage: Boolean = false): Symbol = { + name match { + case n: TypeName => if (isPackage) new StubPackageClassSymbol(owner, n, missingMessage) + else new StubClassSymbol(owner, n, missingMessage) + case _ => new StubTermSymbol(owner, name.toTermName, missingMessage) + } + } + /** The class for all symbols */ abstract class Symbol protected[Symbols] (initOwner: Symbol, initPos: Position, initName: Name) extends SymbolContextApiImpl @@ -505,9 +516,9 @@ trait Symbols extends api.Symbols { self: SymbolTable => * failure to the point when that name is used for something, which is * often to the point of never. */ - def newStubSymbol(name: Name, missingMessage: String, isPackage: Boolean = false): Symbol = name match { - case n: TypeName => if (isPackage) new StubPackageClassSymbol(this, n, missingMessage) else new StubClassSymbol(this, n, missingMessage) - case _ => new StubTermSymbol(this, name.toTermName, missingMessage) + def newStubSymbol(name: Name, missingMessage: String, isPackage: Boolean = false): Symbol = { + // Invoke the overriden `newStubSymbol` in Global that gives us access to typer + Symbols.this.newStubSymbol(this, name, missingMessage, isPackage) } /** Given a field, construct a term symbol that represents the source construct that gave rise the field */ @@ -3491,7 +3502,7 @@ trait Symbols extends api.Symbols { self: SymbolTable => private def fail[T](alt: T): T = { // Avoid issuing lots of redundant errors if (!hasFlag(IS_ERROR)) { - globalError(missingMessage) + globalError(pos, missingMessage) if (settings.debug.value) (new Throwable).printStackTrace |