Skip to content

Illegal access error when constructor parameter has same name and more specific type #7926

Closed
@travisbrown

Description

@travisbrown

minimized code

trait Foo {
  def parent: Option[Foo]
  def getParent: Option[Foo] = parent
}

class Bar(val parent: Option[Foo]) extends Foo
class Qux(parent: Option[Qux]) extends Bar(parent)

object Qux {
  val qux: Qux = new Qux(None)

  def main(args: Array[String]): Unit = println(qux.getParent)
}
This code compiles, but crashes at runtime.
Exception in thread "main" java.lang.IllegalAccessError: Qux.parent()Lscala/Option;
        at Foo.getParent(Foo.scala:3)
        at Bar.getParent(Foo.scala:6)
        at Qux$.main(Foo.scala:12)
        at Qux.main(Foo.scala)

expectation

It should print None, like Scala 2 does. Note that changing Qux's constructor parameter name to something other than parent fixes the issue.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions