E048: Super Qualifier Must Be Parent

This error is emitted when a qualifier used in a super prefix does not name a parent type of the class.

When a qualifier T is used in a super prefix of the form C.super[T], T must be a direct parent type of C. This syntax is used to disambiguate which parent's implementation to call when a class has multiple parents with the same method.


Example

trait A:
  def greet: String = "A"

trait B:
  def greet: String = "B"

class C extends A, B:
  override def greet: String = super[String].greet

Error

-- [E048] Reference Error: example.scala:8:31 ----------------------------------
8 |  override def greet: String = super[String].greet
  |                               ^^^^^^^^^^^^^
  |                               String does not name a parent of class C
  |-----------------------------------------------------------------------------
  | Explanation (enabled by `-explain`)
  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  | When a qualifier T is used in a super prefix of the form C.super[T],
  | T must be a parent type of C.
  |
  | In this case, the parents of class C are:
  |   - A
  |   - B
  |   - Object
   -----------------------------------------------------------------------------

Solution

// Use an actual parent type in the super qualifier
trait A:
  def greet: String = "A"

trait B:
  def greet: String = "B"

class C extends A, B:
  override def greet: String = super[A].greet
// Or call a specific parent's method
trait A:
  def greet: String = "A"

trait B:
  def greet: String = "B"

class C extends A, B:
  override def greet: String = super[B].greet