diff options
author | Miles Sabin <miles@milessabin.com> | 2009-11-24 01:13:01 +0000 |
---|---|---|
committer | Miles Sabin <miles@milessabin.com> | 2009-11-24 01:13:01 +0000 |
commit | ef3fb07b53cf4468332461c9d5cf523019bcd9c9 (patch) | |
tree | cdf9c8a3644812de03c4f320967a94ef6b07dab3 /src/compiler | |
parent | 1c4e51471e89d62d1eddd6d1615c93fd2fede7ca (diff) | |
download | scala-ef3fb07b53cf4468332461c9d5cf523019bcd9c9.tar.gz scala-ef3fb07b53cf4468332461c9d5cf523019bcd9c9.tar.bz2 scala-ef3fb07b53cf4468332461c9d5cf523019bcd9c9.zip |
Improved completion for locals and import.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/Global.scala | 28 |
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) |