aboutsummaryrefslogblamecommitdiff
path: root/src/dotty/tools/dotc/core/DenotTransformers.scala
blob: be85b58772e0a69d4ed4abda718e273e3d95aced (plain) (tree)
1
2
3
4
5
6
7
8
9


                        




                       
               
                               
                                     
 
                          
 


                                                                   
     
 
                                                              
                                        

                                                                            
                                                                          


                                                                      
                                        


                                                                                 
   
 
package dotty.tools.dotc
package core

import Periods._
import SymDenotations._
import Contexts._
import Types._
import Denotations._
import Phases._
import java.lang.AssertionError
import dotty.tools.dotc.util.DotClass

object DenotTransformers {

  /** A transformer group contains a sequence of transformers,
   *  ordered by the phase where they apply. Transformers are added
   *  to a group via `install`.
   */

  /** A transformer transforms denotations at a given phase */
  trait DenotTransformer extends Phase {

    /** The last phase during which the transformed denotations are valid */
    def lastPhaseId(implicit ctx: Context) = ctx.nextTransformerId(id + 1)

    /** The validity period of the transformer in the given context */
    def validFor(implicit ctx: Context): Period =
      Period(ctx.runId, id, lastPhaseId)

    /** The transformation method */
    def transform(ref: SingleDenotation)(implicit ctx: Context): SingleDenotation
  }
}