summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/interactive/Global.scala
diff options
context:
space:
mode:
authorMiles Sabin <miles@milessabin.com>2009-11-24 01:13:01 +0000
committerMiles Sabin <miles@milessabin.com>2009-11-24 01:13:01 +0000
commitef3fb07b53cf4468332461c9d5cf523019bcd9c9 (patch)
treecdf9c8a3644812de03c4f320967a94ef6b07dab3 /src/compiler/scala/tools/nsc/interactive/Global.scala
parent1c4e51471e89d62d1eddd6d1615c93fd2fede7ca (diff)
downloadscala-ef3fb07b53cf4468332461c9d5cf523019bcd9c9.tar.gz
scala-ef3fb07b53cf4468332461c9d5cf523019bcd9c9.tar.bz2
scala-ef3fb07b53cf4468332461c9d5cf523019bcd9c9.zip
Improved completion for locals and import.
Diffstat (limited to 'src/compiler/scala/tools/nsc/interactive/Global.scala')
-rw-r--r--src/compiler/scala/tools/nsc/interactive/Global.scala28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/Global.scala b/src/compiler/scala/tools/nsc/interactive/Global.scala
index 4d2aa9f5da..b8a219fb4d 100644
--- a/src/compiler/scala/tools/nsc/interactive/Global.scala
+++ b/src/compiler/scala/tools/nsc/interactive/Global.scala
@@ -334,6 +334,16 @@ self =>
def stabilizedType(tree: Tree): Type = tree match {
case Ident(_) if tree.symbol.isStable => singleType(NoPrefix, tree.symbol)
case Select(qual, _) if tree.symbol.isStable => singleType(qual.tpe, tree.symbol)
+ case Import(expr, selectors) =>
+ tree.symbol.info match {
+ case analyzer.ImportType(expr) => expr match {
+ case s@Select(qual, name) => singleType(qual.tpe, s.symbol)
+ case i : Ident => i.tpe
+ case _ => tree.tpe
+ }
+ case _ => tree.tpe
+ }
+
case _ => tree.tpe
}
@@ -388,7 +398,16 @@ self =>
}
def typeMembers(pos: Position): List[TypeMember] = {
- val tree = typedTreeAt(pos)
+ val tree1 = typedTreeAt(pos)
+ val tree0 = tree1 match {
+ case tt : TypeTree => tt.original
+ case t => t
+ }
+ val tree = tree0 match {
+ case s@Select(qual, name) if s.tpe == ErrorType => qual
+ case t => t
+ }
+
println("typeMembers at "+tree+" "+tree.tpe)
val context = doLocateContext(pos)
val superAccess = tree.isInstanceOf[Super]
@@ -415,12 +434,13 @@ self =>
}
}
val pre = stabilizedType(tree)
- for (sym <- tree.tpe.decls)
+ val ownerTpe = if (tree.tpe != null) tree.tpe else pre
+ for (sym <- ownerTpe.decls)
addTypeMember(sym, pre, false, NoSymbol)
- for (sym <- tree.tpe.members)
+ for (sym <- ownerTpe.members)
addTypeMember(sym, pre, true, NoSymbol)
val applicableViews: List[SearchResult] =
- new ImplicitSearch(tree, functionType(List(tree.tpe), AnyClass.tpe), true, context.makeImplicit(false))
+ new ImplicitSearch(tree, functionType(List(ownerTpe), AnyClass.tpe), true, context.makeImplicit(false))
.allImplicits
for (view <- applicableViews) {
val vtree = viewApply(view)