summaryrefslogtreecommitdiff
path: root/test/files/run/trait_fields_final.scala
blob: 8b32e5b47d9b5ffbb887a8d28c0b391861a3e254 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// TODO: clarify meaning of final in traits
// In the new compiler, there's no final modifier after mixin for `meh`'s setter,
// whereas 2.12.0-M3 makes meh's trait setter final.
// NOTE: bytecode is identical, but the scalasignature is different
trait Foo { self: Meh =>
  def bar(x: String) = x == "a"
  private final val meh = bar("a")
}

abstract class Meh extends Foo

object Test {
  def main(args: Array[String]): Unit = {
    val setter = classOf[Meh].getDeclaredMethod("Foo$_setter_$Foo$$meh_$eq", java.lang.Boolean.TYPE)
    val getter = classOf[Meh].getDeclaredMethod("Foo$$meh")
    import java.lang.reflect.Modifier._
    assert(isFinal(setter.getModifiers), setter)
    assert(isFinal(getter.getModifiers), getter)
  }

}