Skip to content

Self-type annotations make abstract type members refinements be silently ignored #4349

@scabug

Description

@scabug
trait Base {
  trait BaseInner {
    val base = 0
  }
  type Inner <: BaseInner
}

trait T1 extends Base {
  trait Inner1 extends BaseInner {
    val t1 = 0
  }
  type Inner <: Inner1
  def f1(i: Inner) { i.base + i.t1 }
}

trait T2 extends Base { self: T1 =>
  trait Inner2 extends Inner1 {
    val t2 = 0
  }
  type Inner <: Inner2
  def f2(i: Inner) { i.base + i.t1 + i.t2 }
}

yields

$$ scala I.scala
/home/mikhail.vorozhtsov/I.scala:22: error: value t2 is not a member of T2.this.Inner
  def f2(i: Inner) { i.base + i.t1 + i.t2 }
                                       ^
one error found

Strangely type Inner = Inner2 works, but then changing type Inner <: Inner1 to type Inner = Inner1 breaks it again.

Tested on 2.8.1 and 2.9.0.r24471-b20110317020039

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions