summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/Symbols.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan@lightbend.com>2017-03-27 17:11:09 -0700
committerGitHub <noreply@github.com>2017-03-27 17:11:09 -0700
commit03d5f4ee9242f048e86ad9196740b04852c3b738 (patch)
tree2f629f7e8cd6bc22bf839516e36a9d631e9351b9 /src/reflect/scala/reflect/internal/Symbols.scala
parent99f41a15d16be6707b6c33b5a16093e016db81eb (diff)
parent9cfa239e776c2ce6bd7447fd9de8436c5fe167ab (diff)
downloadscala-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.scala19
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