Skip to content

Confusing error message when overriding def with var in structural refinement returning a user-defined value class  #7709

@scabug

Description

@scabug

This is fine

class VC(val s: String) extends AnyVal

class AImpl {
 def a : VC = new VC("a")
}

class X {

  def build(v: String) = new AImpl {
    private var _a = new VC(v)    
    override def a : VC = _a
    def a_=(newA: String) { _a = new VC(newA) }
  }
}

But this isn't

class VC(val s: String) extends AnyVal

class AImpl {
 def a : VC = new VC("a")
}

class X {
  def build(v: String) = new AImpl {
    override var a = new VC(v)
  }
}

It fails with

error: Parameter type in structural refinement may not refer to a user-defined value class
  def build(v: String) = new AImpl {

Instead of

 error: method a_= overrides nothing

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions