diff options
-rw-r--r-- | src/reflect/scala/reflect/api/TypeTags.scala | 6 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/Symbols.scala | 2 | ||||
-rw-r--r-- | src/reflect/scala/reflect/macros/Aliases.scala | 5 | ||||
-rw-r--r-- | test/files/run/typetags_symbolof_x.check | 6 | ||||
-rw-r--r-- | test/files/run/typetags_symbolof_x.scala | 15 |
5 files changed, 34 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/api/TypeTags.scala b/src/reflect/scala/reflect/api/TypeTags.scala index d6af68f923..1d5bf5d28b 100644 --- a/src/reflect/scala/reflect/api/TypeTags.scala +++ b/src/reflect/scala/reflect/api/TypeTags.scala @@ -345,6 +345,12 @@ trait TypeTags { self: Universe => * @group TypeTags */ def typeOf[T: TypeTag](x: => T): Type = typeOf[T] + + /** + * Type symbol of `x` as derived from a type tag. + * @group TypeTags + */ + def symbolOf[T: WeakTypeTag]: TypeSymbol } private[scala] class SerializedTypeTag(var tpec: TypeCreator, var concrete: Boolean) extends Serializable { diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 94b60bafae..31fb7d2a6e 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -77,6 +77,8 @@ trait Symbols extends api.Symbols { self: SymbolTable => } } + def symbolOf[T: WeakTypeTag]: TypeSymbol = weakTypeOf[T].typeSymbolDirect.asType + abstract class SymbolContextApiImpl extends SymbolContextApi { this: Symbol => diff --git a/src/reflect/scala/reflect/macros/Aliases.scala b/src/reflect/scala/reflect/macros/Aliases.scala index 8651661c63..bd918bbe56 100644 --- a/src/reflect/scala/reflect/macros/Aliases.scala +++ b/src/reflect/scala/reflect/macros/Aliases.scala @@ -126,4 +126,9 @@ trait Aliases { * Type of `x` as derived from a type tag. */ def typeOf[T: TypeTag](x: => T): Type = typeOf[T] + + /** + * Type symbol of `x` as derived from a type tag. + */ + def symbolOf[T: WeakTypeTag]: universe.TypeSymbol = universe.symbolOf[T] } diff --git a/test/files/run/typetags_symbolof_x.check b/test/files/run/typetags_symbolof_x.check new file mode 100644 index 0000000000..fd0e069bca --- /dev/null +++ b/test/files/run/typetags_symbolof_x.check @@ -0,0 +1,6 @@ +class Int +object C +type T +type Id +class Nothing +class Null diff --git a/test/files/run/typetags_symbolof_x.scala b/test/files/run/typetags_symbolof_x.scala new file mode 100644 index 0000000000..333c4e7da4 --- /dev/null +++ b/test/files/run/typetags_symbolof_x.scala @@ -0,0 +1,15 @@ +import scala.reflect.runtime.universe._ + +class C +object C + +object Test extends App { + type T = Int + type Id[X] = X + println(symbolOf[Int]) + println(symbolOf[C.type]) + println(symbolOf[T]) + println(symbolOf[Id[_]]) + println(symbolOf[Nothing]) + println(symbolOf[Null]) +} |