diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-06-24 14:23:17 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-06-24 14:23:17 +0200 |
commit | eebaae55bad824a98fdf4a1811809b8776f36825 (patch) | |
tree | 4175af91c3df33fb355f30be6f00d8f0131a3700 /test/files/neg/t1432.scala | |
parent | d0df4c514f662312e2a9284fef2cf24a284aff28 (diff) | |
download | scala-eebaae55bad824a98fdf4a1811809b8776f36825.tar.gz scala-eebaae55bad824a98fdf4a1811809b8776f36825.tar.bz2 scala-eebaae55bad824a98fdf4a1811809b8776f36825.zip |
SI-7603 Speculative fix for annotation binding error
Reports of:
error: trait Test is abstract; cannot be instantiated
11:09:50 [ant:scalac] @Test def testClientRequestNum = {
11:09:50 [ant:scalac] ^
Suggest that the deferred processing of a LazyAnnotationInfo is binding
the identifier `Test` to the wrong symbol. Inspection of the code shows
that the closure also defers capture of the (mutable) field
`Namer#typer.context`.
This commit captures the context eagerly, and adds logging to let us
know if that eagerly captured context ever differs from the its value
at the point when the annotation info is forced.
I spent a few hours trying to craft a test to back this up, but to no
avail. Here's what the log output will look like:
[log typer] The var `typer.context` in scala.tools.nsc.typechecker.Namers$NormalNamer@1f5ebb08 was mutated before the annotation new a() was forced.
current value = Context(C@Import unit=<console> scope=123861466 errors=false, reportErrors=true, throwErrors=false)
original value = Context(C@Import unit=<console> scope=123861466 errors=false, reportErrors=true, throwErrors=false)
This confirms the hypothesis for the cause of SI-7603. If you see this message, please comment on that ticket.
Diffstat (limited to 'test/files/neg/t1432.scala')
0 files changed, 0 insertions, 0 deletions