summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/macros/Universe.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-02-15 01:16:48 +0100
committerEugene Burmako <xeno.by@gmail.com>2014-02-15 09:32:28 +0100
commit37b3d73f8e99fe3a42d55674068ad4ce6ecefc71 (patch)
tree15ba5205e131a048a68249e76552ce41f5b447f8 /src/reflect/scala/reflect/macros/Universe.scala
parent989aa437b903173f938aa8ac2f6783bcc1dd7a99 (diff)
downloadscala-37b3d73f8e99fe3a42d55674068ad4ce6ecefc71.tar.gz
scala-37b3d73f8e99fe3a42d55674068ad4ce6ecefc71.tar.bz2
scala-37b3d73f8e99fe3a42d55674068ad4ce6ecefc71.zip
makes internal.decorators signatures work
After fighting with path-dependent types to express wrappee.type, I decided to take a different approach and replaced wrappee.type with parametric polymorphism.
Diffstat (limited to 'src/reflect/scala/reflect/macros/Universe.scala')
-rw-r--r--src/reflect/scala/reflect/macros/Universe.scala33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/reflect/scala/reflect/macros/Universe.scala b/src/reflect/scala/reflect/macros/Universe.scala
index 11281551f1..3906a3388d 100644
--- a/src/reflect/scala/reflect/macros/Universe.scala
+++ b/src/reflect/scala/reflect/macros/Universe.scala
@@ -3,6 +3,7 @@ package reflect
package macros
import scala.language.implicitConversions
+import scala.language.higherKinds
/**
* <span class="badge badge-red" style="float: right;">EXPERIMENTAL</span>
@@ -143,10 +144,10 @@ abstract class Universe extends scala.reflect.api.Universe {
/** @inheritdoc */
trait MacroDecoratorApi extends DecoratorApi {
/** @inheritdoc */
- type TreeDecorator <: MacroTreeDecoratorApi
+ override type TreeDecorator[T <: Tree] <: MacroTreeDecoratorApi[T]
/** @see [[TreeDecorator]] */
- class MacroTreeDecoratorApi(override val tree: Tree) extends TreeDecoratorApi(tree) {
+ class MacroTreeDecoratorApi[T <: Tree](override val tree: T) extends TreeDecoratorApi[T](tree) {
/** @see [[internal.changeOwner]] */
def changeOwner(prev: Symbol, next: Symbol): tree.type = internal.changeOwner(tree, prev, next)
@@ -154,49 +155,49 @@ abstract class Universe extends scala.reflect.api.Universe {
def attachments: Attachments { type Pos = Position } = internal.attachments(tree)
/** @see [[internal.updateAttachment]] */
- def updateAttachment[T: ClassTag](attachment: T): tree.type = internal.updateAttachment(tree, attachment)
+ def updateAttachment[A: ClassTag](attachment: A): tree.type = internal.updateAttachment(tree, attachment)
/** @see [[internal.removeAttachment]] */
- def removeAttachment[T: ClassTag]: tree.type = internal.removeAttachment[T](tree)
+ def removeAttachment[A: ClassTag]: T = internal.removeAttachment[A](tree)
/** @see [[internal.setPos]] */
- def setPos(newpos: Position): tree.type = internal.setPos(tree, newpos)
+ def setPos(newpos: Position): T = internal.setPos(tree, newpos)
/** @see [[internal.setType]] */
- def setType(tp: Type): tree.type = internal.setType(tree, tp)
+ def setType(tp: Type): T = internal.setType(tree, tp)
/** @see [[internal.defineType]] */
- def defineType(tp: Type): tree.type = internal.defineType(tree, tp)
+ def defineType(tp: Type): T = internal.defineType(tree, tp)
/** @see [[internal.setSymbol]] */
- def setSymbol(sym: Symbol): tree.type = internal.setSymbol(tree, sym)
+ def setSymbol(sym: Symbol): T = internal.setSymbol(tree, sym)
}
/** @inheritdoc */
- type SymbolDecorator <: MacroSymbolDecoratorApi
+ override type SymbolDecorator[T <: Symbol] <: MacroSymbolDecoratorApi[T]
/** @see [[TreeDecorator]] */
- class MacroSymbolDecoratorApi(override val symbol: Symbol) extends SymbolDecoratorApi(symbol) {
+ class MacroSymbolDecoratorApi[T <: Symbol](override val symbol: T) extends SymbolDecoratorApi[T](symbol) {
/** @see [[internal.attachments]] */
def attachments: Attachments { type Pos = Position } = internal.attachments(symbol)
/** @see [[internal.updateAttachment]] */
- def updateAttachment[T: ClassTag](attachment: T): symbol.type = internal.updateAttachment(symbol, attachment)
+ def updateAttachment[A: ClassTag](attachment: A): T = internal.updateAttachment(symbol, attachment)
/** @see [[internal.removeAttachment]] */
- def removeAttachment[T: ClassTag]: symbol.type = internal.removeAttachment[T](symbol)
+ def removeAttachment[A: ClassTag]: T = internal.removeAttachment[A](symbol)
/** @see [[internal.setInfo]] */
- def setInfo(tpe: Type): symbol.type = internal.setInfo(symbol, tpe)
+ def setInfo(tpe: Type): T = internal.setInfo(symbol, tpe)
/** @see [[internal.setAnnotations]] */
- def setAnnotations(annots: Annotation*): symbol.type = internal.setAnnotations(symbol, annots: _*)
+ def setAnnotations(annots: Annotation*): T = internal.setAnnotations(symbol, annots: _*)
/** @see [[internal.setName]] */
- def setName(name: Name): symbol.type = internal.setName(symbol, name)
+ def setName(name: Name): T = internal.setName(symbol, name)
/** @see [[internal.setPrivateWithin]] */
- def setPrivateWithin(sym: Symbol): symbol.type = internal.setPrivateWithin(symbol, sym)
+ def setPrivateWithin(sym: Symbol): T = internal.setPrivateWithin(symbol, sym)
}
}
}