diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-02-15 01:16:48 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-02-15 09:32:28 +0100 |
commit | 37b3d73f8e99fe3a42d55674068ad4ce6ecefc71 (patch) | |
tree | 15ba5205e131a048a68249e76552ce41f5b447f8 /src/reflect/scala/reflect/macros/Universe.scala | |
parent | 989aa437b903173f938aa8ac2f6783bcc1dd7a99 (diff) | |
download | scala-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.scala | 33 |
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) } } } |