diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-13 11:02:30 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-13 11:02:30 +0100 |
commit | 079296632d8ef5ecc40aafa83757231599c78783 (patch) | |
tree | ae523bd1269c22b460890298c34dc6c922e1aafa /src/reflect/scala/reflect/internal/Symbols.scala | |
parent | 86e045e2863b04bf4af4abb5c2ce345bcdae2b80 (diff) | |
download | scala-079296632d8ef5ecc40aafa83757231599c78783.tar.gz scala-079296632d8ef5ecc40aafa83757231599c78783.tar.bz2 scala-079296632d8ef5ecc40aafa83757231599c78783.zip |
SI-6440 Address regressions around MissingRequirementError
Go back to using globalError to report when a stub's info is referenced,
and only throw the MissingRequirementError when compilation really
must abort due to having a StubTermSymbol in a place where a
StubClassSymbol would have been a better choice.
This situation arises when an entire package is missing from the
classpath, as was the case in the reported bug.
Adds `StoreReporterDirectTest`, which buffers messages issued
during compilation for more structured interrogation. Use this
in two test for manifests -- these tests were using a crude means
of grepping compiler console output to focus on the relevant output,
but this approach was insufficient with the new multi-line error
message emitted as part of this change.
Also used that base test class to add two new tests: one for
the reported error (package missing), and another for a simpler
error (class missing). The latter test shows how stub symbols
allow code to compile if it doesn't the subset of signatures
in some type that refer to a missing class.
Gave the INFO/WARNING/ERROR members of Reporter sensible
toString implementations; they inherit from Enumeration#Value
in an unusual manner (why?) that means the built in toString of
Enumeration printed `Severity@0`.
Diffstat (limited to 'src/reflect/scala/reflect/internal/Symbols.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Symbols.scala | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 67b2d05224..06bf54c1f8 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -3103,12 +3103,18 @@ trait Symbols extends api.Symbols { self: SymbolTable => ) } trait StubSymbol extends Symbol { - override final def failIfStub() = fail(()) protected def missingMessage: String + + /** Fail the stub by throwing a [[scala.reflect.internal.MissingRequirementError]]. */ + override final def failIfStub() = {MissingRequirementError.signal(missingMessage)} // + + /** Fail the stub by reporting an error to the reporter, setting the IS_ERROR flag + * on this symbol, and returning the dummy value `alt`. + */ private def fail[T](alt: T): T = { // Avoid issuing lots of redundant errors if (!hasFlag(IS_ERROR)) { - MissingRequirementError.signal(missingMessage) + globalError(missingMessage) if (settings.debug.value) (new Throwable).printStackTrace |