Skip to content

inner class of enum companion not visible from the enum, unless companion is declared after  #13554

Closed
@yuriy-yarosh

Description

@yuriy-yarosh

Compiler version

3.0.2 and 3.1.0-RC2

Minimized code

object StatusCode:
  enum Matcher:
    case ServerError extends Matcher
  end Matcher
end StatusCode

enum StatusCode(code: Int, m: StatusCode.Matcher):
  case InternalServerError extends StatusCode(500, StatusCode.Matcher.ServerError)
end StatusCode

object Main {
  def main(args: Array[String]): Unit = {
    println(StatusCode.InternalServerError)
  }
}

Output

-- Error:
7 |enum StatusCode(code: Int, m: StatusCode.Matcher):
  |                              ^^^^^^^^^^^^^^^^^^
  |                         type Matcher is not a member of object StatusCode

Expectation

When putting the object declaration after the enum declaration it does compile, like so

enum StatusCode(code: Int, m: StatusCode.Matcher):
  case InternalServerError extends StatusCode(500, StatusCode.Matcher.ServerError)
end StatusCode

object StatusCode:
  enum Matcher:
    case ServerError extends Matcher
  end Matcher
end StatusCode

object Main {
  def main(args: Array[String]): Unit = {
    println(StatusCode.InternalServerError)
  }
}

Which is really frustrating.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions