Packages

class Extender extends TypingTransformer

Source
ExtensionMethods.scala
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Extender
  2. TypingTransformer
  3. Transformer
  4. Transformer
  5. AnyRef
  6. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new Extender(unit: Global.CompilationUnit)

Value Members

  1. def atOwner[A](tree: Global.Tree, owner: Global.Symbol)(trans: ⇒ A): A
    Definition Classes
    TypingTransformer
  2. final def atOwner[A](owner: Global.Symbol)(trans: ⇒ A): A
    Definition Classes
    TypingTransformer → Transformer
  3. def checkNonCyclic(pos: Global.Position, seen: Set[Global.Symbol], clazz: Global.Symbol): Unit
  4. def extensionMethInfo(extensionMeth: Global.Symbol, origInfo: Global.Type, clazz: Global.Symbol): Global.Type

    We will need to clone the info of the original method (which obtains clones of the method type parameters), clone the type parameters of the value class, and create a new polymethod with the union of all those type parameters, with their infos adjusted to be consistent with their new home.

    We will need to clone the info of the original method (which obtains clones of the method type parameters), clone the type parameters of the value class, and create a new polymethod with the union of all those type parameters, with their infos adjusted to be consistent with their new home. Example:

    class Foo[+A <: AnyRef](val xs: List[A]) extends AnyVal { def baz[B >: A](x: B): List[B] = x :: xs // baz has to be transformed into this extension method, where // A is cloned from class Foo and B is cloned from method baz: // def extension$baz[B >: A <: Any, A >: Nothing <: AnyRef]($this: Foo[A])(x: B): List[B] }

    TODO: factor out the logic for consolidating type parameters from a class and a method for re-use elsewhere, because nobody will get this right without some higher level facilities.

  5. var localTyper: (analyzer)#Typer
    Definition Classes
    TypingTransformer
  6. def transform(tree: Global.Tree): Global.Tree
    Definition Classes
    ExtenderTypingTransformer → Transformer
  7. def transformCaseDefs(trees: List[Global.CaseDef]): List[Global.CaseDef]
    Definition Classes
    Transformer
  8. def transformIdents(trees: List[Global.Ident]): List[Global.Ident]
    Definition Classes
    Transformer
  9. def transformMemberDefs(trees: List[Global.MemberDef]): List[Global.MemberDef]
    Definition Classes
    Transformer
  10. def transformModifiers(mods: Global.Modifiers): Global.Modifiers
    Definition Classes
    Transformer
  11. def transformStats(stats: List[Global.Tree], exprOwner: Global.Symbol): List[Global.Tree]
    Definition Classes
    Extender → Transformer
  12. def transformTemplate(tree: Global.Template): Global.Template
    Definition Classes
    Transformer
  13. def transformTrees(trees: List[Global.Tree]): List[Global.Tree]
    Definition Classes
    Transformer
  14. def transformTypeDefs(trees: List[Global.TypeDef]): List[Global.TypeDef]
    Definition Classes
    Transformer
  15. def transformUnit(unit: Global.CompilationUnit): Unit
    Definition Classes
    Transformer
  16. def transformValDef(tree: Global.ValDef): Global.ValDef
    Definition Classes
    Transformer
  17. def transformValDefs(trees: List[Global.ValDef]): List[Global.ValDef]
    Definition Classes
    Transformer
  18. def transformValDefss(treess: List[List[Global.ValDef]]): List[List[Global.ValDef]]
    Definition Classes
    Transformer
  19. val treeCopy: Global.TreeCopier
    Definition Classes
    Transformer