class ResolveSuper
extends MiniPhaseTransform with IdentityDenotTransformer

This phase adds super accessors and method overrides where linearization differs from Java's rule for default methods in interfaces. In particular:

  For every trait M directly implemented by the class (see SymUtils.mixin), in
  reverse linearization order, add the following definitions to C:

    3.1 (done in `superAccessors`) For every superAccessor
        `<mods> def super$f[Ts](ps1)...(psN): U` in M:

          <mods> def super$f[Ts](ps1)...(psN): U = super[S].f[Ts](ps1)...(psN)

        where `S` is the superclass of `M` in the linearization of `C`.

    3.2 (done in `methodOverrides`) For every method
        `<mods> def f[Ts](ps1)...(psN): U` in M` that needs to be disambiguated:

          <mods> def f[Ts](ps1)...(psN): U = super[M].f[Ts](ps1)...(psN)

  A method in M needs to be disambiguated if it is concrete, not overridden in C,
  and if it overrides another concrete method.

This is the first part of what was the mixin phase. It is complemented by Mixin, which runs after erasure.

Constructors

ResolveSuper ( )

Members

private val PrivateOrAccessorOrDeferred : FlagSet
[+] override def phaseName : String

A name given to the Phase that can be used to debug the compiler. For instance, it is possible to print trees after a given phase using:

A name given to the Phase that can be used to debug the compiler. For instance, it is possible to print trees after a given phase using:

$ ./bin/dotc -Xprint:<phaseNameHere> sourceFile.scala
override def runsAfter : Set [ Class [ Nothing <: Phase ] ]

List of names of phases that should precede this phase

List of names of phases that should precede this phase

override def transformDefDef ( ddef: DefDef ) ( implicit ctx: Context , info: TransformerInfo ) : Tree
override def transformTemplate ( impl: Template ) ( implicit ctx: Context , info: TransformerInfo ) : Tree