summaryrefslogblamecommitdiff
path: root/test/files/run/trait_fields_final.scala
blob: 8b32e5b47d9b5ffbb887a8d28c0b391861a3e254 (plain) (tree)




















                                                                                                    
// 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)
  }

}