blob: f2aa804e28f9302e31a1048103f546abe0f5bbf5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
trait T {
val traitVal = ""
}
object O extends App with T {
val vall = ""
lazy val lazyy = ""
def deff = ""
println(vall) // no warn
new {
println(vall) // no warn
}
}
object Client {
println(O.vall) // warn
import O.vall
println(vall) // warn
println(O.lazyy) // no warn
println(O.deff) // no warn
println(O.traitVal) // no warn
}
// Delayed init usage pattern from Specs2
// See: https://groups.google.com/d/msg/scala-sips/wP6dL8nIAQs/ogjoPE-MSVAJ
trait Before extends DelayedInit {
def before()
override def delayedInit(x: => Unit): Unit = { before; x }
}
object Spec {
trait UserContext extends Before {
def before() = ()
val foo = "foo"
}
new UserContext {
println(foo) // no warn
println(this.foo) // no warn
println({locally(()); this}.foo) // warn (spurious, but we can't discriminate)
}
}
|