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 /test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.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 'test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.scala')
-rw-r--r-- | test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.scala | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.scala b/test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.scala index e984127583..6804baa0c3 100644 --- a/test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.scala +++ b/test/files/run/typetags_without_scala_reflect_typetag_manifest_interop.scala @@ -1,6 +1,7 @@ import scala.tools.partest._ +import scala.tools.nsc.Settings -object Test extends DirectTest { +object Test extends StoreReporterDirectTest { def code = ??? def library = """ @@ -29,18 +30,18 @@ object Test extends DirectTest { """ def compileApp() = { val classpath = List(sys.props("partest.lib"), testOutput.path) mkString sys.props("path.separator") + val global = newCompiler("-cp", classpath, "-d", testOutput.path) compileString(newCompiler("-cp", classpath, "-d", testOutput.path))(app) + //global.reporter.ERROR.foreach(println) } def show(): Unit = { - val prevErr = System.err - val baos = new java.io.ByteArrayOutputStream(); - System.setErr(new java.io.PrintStream(baos)); compileLibrary(); + println(filteredInfos.mkString("\n")) + storeReporter.infos.clear() compileApp(); // we should get bad symbolic reference errors, because we're trying to use an implicit that can't be unpickled // but we don't know the number of these errors and their order, so I just ignore them all - baos.toString.split("\n") filter (!_.startsWith("error: bad symbolic reference")) foreach println - System.setErr(prevErr) + println(filteredInfos.filterNot (_.msg.contains("bad symbolic reference")).mkString("\n")) } -}
\ No newline at end of file +} |