@@ -251,18 +251,40 @@ class DottyLanguageServer extends LanguageServer
251251 val enclTree = Interactive .enclosingTree(driver.openedTrees(uri), pos)
252252 val sym = Interactive .sourceSymbol(enclTree.symbol)
253253
254- if (sym == NoSymbol ) Nil .asJava
255- else {
256- val (trees, include) =
257- if (enclTree.isInstanceOf [MemberDef ])
258- (driver.allTreesContaining(sym.name.sourceModuleName.toString),
259- Include .overriding | Include .overridden)
260- else
261- (SourceTree .fromSymbol(sym.topLevelClass.asClass).toList,
262- Include .overriding)
263- val defs = Interactive .namedTrees(trees, include, sym)
264- defs.map(d => location(d.namePos)).asJava
265- }
254+ val defs =
255+ if (sym == NoSymbol ) Nil
256+ else enclTree match {
257+ case imp : Import =>
258+ def lookup (name : Name ): Symbol = {
259+ imp.expr.tpe.member(name).symbol
260+ }
261+ val importedSyms = imp.selectors.flatMap {
262+ case id : Ident if id.pos.contains(pos.pos) =>
263+ lookup(id.name) :: lookup(id.name.toTypeName) :: Nil
264+ case thicket @ Thicket ((id : Ident ) :: (_ : Ident ) :: Nil ) if thicket.pos.contains(pos.pos) =>
265+ lookup(id.name) :: lookup(id.name.toTypeName) :: Nil
266+ case _ =>
267+ Nil
268+ }
269+
270+ importedSyms.flatMap { sym =>
271+ val trees = driver.allTreesContaining(sym.name.sourceModuleName.toString)
272+ val defSymbol = if (sym is Flags .ModuleVal ) sym.moduleClass else sym
273+ Interactive .namedTrees(trees, Include .overriding, defSymbol)
274+ }
275+
276+ case _ =>
277+ val (trees, include) =
278+ if (enclTree.isInstanceOf [MemberDef ])
279+ (driver.allTreesContaining(sym.name.sourceModuleName.toString),
280+ Include .overriding | Include .overridden)
281+ else
282+ (SourceTree .fromSymbol(sym.topLevelClass.asClass).toList,
283+ Include .overriding)
284+ Interactive .namedTrees(trees, include, sym)
285+ }
286+
287+ defs.map(d => location(d.namePos)).asJava
266288 }
267289
268290 override def references (params : ReferenceParams ) = computeAsync { cancelToken =>
0 commit comments