summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/Trees.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2012-07-21 15:02:40 +0200
committerIulian Dragos <jaguarul@gmail.com>2012-07-23 17:02:03 +0200
commitf2819ff3796427378c4688e13bc0f4a20b550df9 (patch)
treee458ca024c35f147bddb24bd6559da1a1de269a5 /src/reflect/scala/reflect/internal/Trees.scala
parent40ddd083592ba3947cb5182d6db26798bad9a9cb (diff)
downloadscala-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.scala10
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 = {