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
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- def ->[B](y: B): (Extender, B)
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
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
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
var
curTree: Global.Tree
- Attributes
- protected
- Definition Classes
- TypingTransformer
-
def
currentClass: Global.Symbol
- Attributes
- protected
- Definition Classes
- Transformer
-
def
currentMethod: Global.Symbol
- Attributes
- protected
- Definition Classes
- Transformer
-
var
currentOwner: Global.Symbol
- Attributes
- protected[scala]
- Definition Classes
- Transformer
- def ensuring(cond: (Extender) ⇒ Boolean, msg: ⇒ Any): Extender
- def ensuring(cond: (Extender) ⇒ Boolean): Extender
- def ensuring(cond: Boolean, msg: ⇒ Any): Extender
- def ensuring(cond: Boolean): Extender
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
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.
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- def formatted(fmtstr: String): String
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
var
localTyper: (analyzer)#Typer
- Definition Classes
- TypingTransformer
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
def
transform(tree: Global.Tree): Global.Tree
- Definition Classes
- Extender → TypingTransformer → Transformer
-
def
transformAtOwner(owner: Global.Symbol, tree: Global.Tree): Global.Tree
- Definition Classes
- TypingTransformer
-
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
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
- def →[B](y: B): (Extender, B)
The Scala compiler and reflection APIs.