@@ -62,6 +62,7 @@ import dotty.tools.dotc.semanticdb.Scala3.TastyFakeSymbol
6262
6363
6464import dotty .tools .dotc .SDBSymbolNameBuilder
65+ import dotty .tools .dotc .core .StdNames .str
6566
6667extension (sym : Symbol ){
6768
@@ -292,16 +293,24 @@ class CustomTreeTraverser(sourceFilePath: String)(using ctx: Context)(using SDBS
292293 val sname = sym.SDBname
293294 registerSymbol(sym, symkinds)
294295
295- private def registerOccurrence (symbol : Symbol , span : SourcePosition , role : SymbolOccurrence .Role )(using Context , SDBSymbolNameBuilder ): Unit =
296- val range = if span.isUnknown then None else
297- val result = extractor.extract(symbol.name.toString(), span, symbol)
298- Some (result)
299-
296+ private def registerOccurrence (symbol : Symbol , range : Option [dotty.tools.dotc.semanticdb.Range ], role : SymbolOccurrence .Role )(using Context , SDBSymbolNameBuilder ): Unit =
300297 val occ = SymbolOccurrence (range, symbol.SDBname , role)
301298 if ! generated.contains(occ) && occ.symbol.nonEmpty && ! range.isEmpty then
302299 occurrences += occ
303300 generated += occ
301+
302+ private def registerOccurrence (symbol : Symbol , span : SourcePosition , role : SymbolOccurrence .Role )(using Context , SDBSymbolNameBuilder ): Unit =
303+ val range = if span.isUnknown then None else
304+ val result = extractor.extract(symbol.name.toString(), span, symbol)
305+ Some (result)
306+ registerOccurrence(symbol, range, role)
307+
308+ private def registerOccurrence (symbol : Symbol , otherSymbol : Symbol , otherSymbolSpan : SourcePosition , role : SymbolOccurrence .Role )(using Context , SDBSymbolNameBuilder ): Unit =
309+ val range = if otherSymbolSpan.isUnknown then None else
310+ val result = extractor.extract(otherSymbol.name.toString(), otherSymbolSpan, otherSymbol)
311+ Some (result)
304312
313+ registerOccurrence(symbol, range, role)
305314
306315 private def registerOccurrence (symbol : Symbol , symbolName : String , span : SourcePosition , role : SymbolOccurrence .Role )(using Context , SDBSymbolNameBuilder ): Unit =
307316 val range = if span.isUnknown then None else
@@ -392,13 +401,21 @@ class CustomTreeTraverser(sourceFilePath: String)(using ctx: Context)(using SDBS
392401 case assign : Assign =>
393402 assign.lhs match
394403 case select : Select =>
395- registerOccurrence(select.symbol, select.pos, dotty.tools.dotc.semanticdb.SymbolOccurrence .Role .REFERENCE )
404+ val setterName = select.symbol.name.toTermName match
405+ case simpleName : SimpleName => simpleName.append(str.SETTER_SUFFIX )
406+ case _ => select.symbol.name.toTermName
407+
408+ val found = select.symbol.owner match
409+ case classSymbol : ClassSymbol =>
410+ classSymbol.declarations.find(_.name == setterName).getOrElse(select.symbol)
411+ case _ => select.symbol
412+
413+ registerOccurrence(found, select.symbol, select.pos, dotty.tools.dotc.semanticdb.SymbolOccurrence .Role .REFERENCE )
396414 super .traverse(assign.rhs)
397415 case _ => super .traverse(tree)
398416
399417
400418 case ident : Ident =>
401-
402419 registerOccurrence(ident.symbol, ident.pos, dotty.tools.dotc.semanticdb.SymbolOccurrence .Role .REFERENCE )
403420 super .traverse(tree)
404421
0 commit comments