diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-12-17 17:47:15 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-12-18 14:29:17 +0100 |
commit | 7e85b595502974bebf2f2625c6bc3645f0d3ab27 (patch) | |
tree | 842325683b4d5458e1ae639718a75c3bc32d25f7 /test/files/presentation/t8085 | |
parent | a12dd9c3b6fb4a767eec8f6d3bf0a9a2266eff85 (diff) | |
download | scala-7e85b595502974bebf2f2625c6bc3645f0d3ab27.tar.gz scala-7e85b595502974bebf2f2625c6bc3645f0d3ab27.tar.bz2 scala-7e85b595502974bebf2f2625c6bc3645f0d3ab27.zip |
SI-8085 Fix BrowserTraverser for package objects
A source file like:
import foo.bar
package object baz
Is parsed into:
package <empty> {
import foo.bar
package baz {
object `package`
}
}
A special case in Namers compensates by adjusting the owner of
`baz` to be `<root>`, rather than `<empty>`.
This wasn't being accounted for in `BrowserTraverser`, which
underpins `-sourcepath`, and allows the presentation compiler to
load top level symbols from sources outside those passes as
the list of sources to compile.
This bug did not appear in sources like:
package p1
package object p2 { ... }
... because the parser does not wrap this in the `package <empty> {}`
This goes some way to explaining why it has gone unnoticed for
so long.
Diffstat (limited to 'test/files/presentation/t8085')
-rw-r--r-- | test/files/presentation/t8085/Test.scala | 1 | ||||
-rw-r--r-- | test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala | 6 | ||||
-rw-r--r-- | test/files/presentation/t8085/src/nodescala/package.scala | 7 |
3 files changed, 5 insertions, 9 deletions
diff --git a/test/files/presentation/t8085/Test.scala b/test/files/presentation/t8085/Test.scala index 5d11009818..e46b7ab8c8 100644 --- a/test/files/presentation/t8085/Test.scala +++ b/test/files/presentation/t8085/Test.scala @@ -5,7 +5,6 @@ import scala.tools.nsc.interactive.Response object Test extends InteractiveTest { override def execute(): Unit = { - // loadSourceAndWaitUntilTypechecked("package.scala") // <-- uncomment this line and the test succeed val src = loadSourceAndWaitUntilTypechecked("NodeScalaSuite.scala") checkErrors(src) } diff --git a/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala b/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala index a8803ff86d..45e43c7afb 100644 --- a/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala +++ b/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala @@ -1,12 +1,10 @@ package nodescala -import scala.concurrent.Future - class NodeScalaSuite { - Future.always(517) + "".rich // This is here only to prove that the presentation compiler is instantiated with the // correct `sourcepath` value (if it wasn't, you would see a `not found: type Foo` in // the test's output println(new Foo()) -}
\ No newline at end of file +} diff --git a/test/files/presentation/t8085/src/nodescala/package.scala b/test/files/presentation/t8085/src/nodescala/package.scala index 6e9d4b729a..26fb9f08e4 100644 --- a/test/files/presentation/t8085/src/nodescala/package.scala +++ b/test/files/presentation/t8085/src/nodescala/package.scala @@ -1,8 +1,7 @@ -import scala.concurrent.Future // <-- if you move the import *inside* the package object, then it all works fine!! +import scala.Some // <-- if you move the import *inside* the package object, then it all works fine!! package object nodescala { - implicit class FutureCompanionOps[T](val f: Future.type) extends AnyVal { - def always[T](value: T): Future[T] = Promise[T].success(value).future + implicit class StringOps(val f: String) { + def rich = 0 } } - |