diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2012-07-21 15:02:40 +0200 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2012-07-23 17:02:03 +0200 |
commit | f2819ff3796427378c4688e13bc0f4a20b550df9 (patch) | |
tree | e458ca024c35f147bddb24bd6559da1a1de269a5 /src/reflect/scala/reflect/internal/Trees.scala | |
parent | 40ddd083592ba3947cb5182d6db26798bad9a9cb (diff) | |
download | scala-f2819ff3796427378c4688e13bc0f4a20b550df9.tar.gz scala-f2819ff3796427378c4688e13bc0f4a20b550df9.tar.bz2 scala-f2819ff3796427378c4688e13bc0f4a20b550df9.zip |
Small changes to reflection API to make it safe for IDE use.
* Removed `typeSymbol` and `termSymbol` from `reflect.api.base`, and pushed them down to
`reflect.api`.
* extracted `TypeTree.symbol` to a top-level method so it can be overridden in other layers
Diffstat (limited to 'src/reflect/scala/reflect/internal/Trees.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Trees.scala | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala index e92d644f4a..619e3bc170 100644 --- a/src/reflect/scala/reflect/internal/Trees.scala +++ b/src/reflect/scala/reflect/internal/Trees.scala @@ -469,7 +469,7 @@ trait Trees extends api.Trees { self: SymbolTable => private var orig: Tree = null private[scala] var wasEmpty: Boolean = false - override def symbol = if (tpe == null) null else tpe.typeSymbol + override def symbol = typeTreeSymbol(this) // if (tpe == null) null else tpe.typeSymbol override def isEmpty = (tpe eq null) || tpe == NoType def original: Tree = orig @@ -1024,6 +1024,14 @@ trait Trees extends api.Trees { self: SymbolTable => } } + + /** Delegate for a TypeTree symbol. This operation is unsafe because + * it may trigger type checking when forcing the type symbol of the + * underlying type. + */ + protected def typeTreeSymbol(tree: TypeTree): Symbol = + if (tree.tpe == null) null else tree.tpe.typeSymbol + // --- generic traversers and transformers override protected def itraverse(traverser: Traverser, tree: Tree): Unit = { |