class Extender extends TypingTransformer
- Source
- ExtensionMethods.scala
- Alphabetic
- By Inheritance
- Extender
- TypingTransformer
- Transformer
- Transformer
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
- new Extender(unit: Global.CompilationUnit)
Value Members
-
def
atOwner[A](tree: Global.Tree, owner: Global.Symbol)(trans: ⇒ A): A
- Definition Classes
- TypingTransformer
-
final
def
atOwner[A](owner: Global.Symbol)(trans: ⇒ A): A
- Definition Classes
- TypingTransformer → Transformer
- def checkNonCyclic(pos: Global.Position, seen: Set[Global.Symbol], clazz: Global.Symbol): Unit
-
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.
-
var
localTyper: (analyzer)#Typer
- Definition Classes
- TypingTransformer
-
def
transform(tree: Global.Tree): Global.Tree
- Definition Classes
- Extender → TypingTransformer → Transformer
-
def
transformCaseDefs(trees: List[Global.CaseDef]): List[Global.CaseDef]
- Definition Classes
- Transformer
-
def
transformIdents(trees: List[Global.Ident]): List[Global.Ident]
- Definition Classes
- Transformer
-
def
transformMemberDefs(trees: List[Global.MemberDef]): List[Global.MemberDef]
- Definition Classes
- Transformer
-
def
transformModifiers(mods: Global.Modifiers): Global.Modifiers
- Definition Classes
- Transformer
-
def
transformStats(stats: List[Global.Tree], exprOwner: Global.Symbol): List[Global.Tree]
- Definition Classes
- Extender → Transformer
-
def
transformTemplate(tree: Global.Template): Global.Template
- Definition Classes
- Transformer
-
def
transformTrees(trees: List[Global.Tree]): List[Global.Tree]
- Definition Classes
- Transformer
-
def
transformTypeDefs(trees: List[Global.TypeDef]): List[Global.TypeDef]
- Definition Classes
- Transformer
-
def
transformUnit(unit: Global.CompilationUnit): Unit
- Definition Classes
- Transformer
-
def
transformValDef(tree: Global.ValDef): Global.ValDef
- Definition Classes
- Transformer
-
def
transformValDefs(trees: List[Global.ValDef]): List[Global.ValDef]
- Definition Classes
- Transformer
-
def
transformValDefss(treess: List[List[Global.ValDef]]): List[List[Global.ValDef]]
- Definition Classes
- Transformer
-
val
treeCopy: Global.TreeCopier
- Definition Classes
- Transformer
The Scala compiler and reflection APIs.