@@ -341,7 +341,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
341341 }
342342 }
343343
344- def iterateParent (symbol : Symbol ): String = {
344+ def iterateParent (symbol : Symbol , isMutableAssignement : Boolean = false ): String = {
345345 if (symbol.name == " <none>" || symbol.name == " <root>" ) then {
346346 // TODO had a "NoDenotation" test to avoid
347347 // relying on the name itself
@@ -359,30 +359,32 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
359359
360360
361361 val isdef = symbol match {case IsDefSymbol (_) => true case _ => false }
362+ val symbolName = if (isMutableAssignement) symbol.trueName + " _=" else symbol.trueName
363+ println(" =>" , symbolName)
362364 val next_atom =
363365 if (symbol.isPackage) {
364- d.Package (symbol.trueName )
366+ d.Package (symbolName )
365367 } else if (symbol.isObject) {
366368 symbol match {
367369 case IsClassSymbol (classsymbol) =>
368370 d.Term (resolveClass(classsymbol).trueName)
369371 case _ =>
370- d.Term (symbol.trueName )
372+ d.Term (symbolName )
371373 }
372374 } else if (symbol.isValMethod && ! symbol.isVarAccessor) {
373- d.Term (symbol.trueName )
375+ d.Term (symbolName )
374376 } else if (symbol.isMethod || symbol.isUsefulField || symbol.isVarAccessor) {
375377 println(" METHOD" , symbol.isMethod, symbol.isUsefulField)
376- d.Method (symbol.trueName ,
377- disimbiguate(previous_symbol + symbol.trueName , symbol))
378+ d.Method (symbolName ,
379+ disimbiguate(previous_symbol + symbolName , symbol))
378380 } else if (symbol.isTypeParameter) {
379- d.TypeParameter (symbol.trueName )
381+ d.TypeParameter (symbolName )
380382 } else if (symbol.isValueParameter) {
381- d.Parameter (symbol.trueName )
383+ d.Parameter (symbolName )
382384 } else if (symbol.isType || symbol.isTrait) {
383- d.Type (symbol.trueName )
385+ d.Type (symbolName )
384386 } else {
385- d.Term (symbol.trueName )
387+ d.Term (symbolName )
386388 }
387389
388390 Symbols .Global (previous_symbol, next_atom)
@@ -411,32 +413,33 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
411413 )
412414 }
413415
414- def symbolToSymbolString (symbol : Symbol ): (String , Boolean ) = {
416+ def symbolToSymbolString (symbol : Symbol , isMutableAssignement : Boolean = false ): (String , Boolean ) = {
415417 if (symbol.isSemanticdbLocal) {
416418 var localsymbol = Symbols .Local (local_offset.toString)
417419 local_offset += 1
418420 (localsymbol, false )
419421 } else {
420- (iterateParent(symbol), true )
422+ (iterateParent(symbol, isMutableAssignement ), true )
421423 }
422424 }
423425
424426 def addOccurence (symbol : Symbol ,
425427 type_symbol : s.SymbolOccurrence .Role ,
426- range : s.Range ): Unit = {
428+ range : s.Range ,
429+ isMutableAssignement: Boolean = false ): Unit = {
427430 if (symbol.name == " <none>" ) return
428431
429432
430433 println(" ===> " , symbol, symbol.flags)
431-
434+ val symbolName = if (isMutableAssignement) symbol.trueName + " _= " else symbol.trueName
432435 val (symbol_path, is_global) = posToRange(symbol.pos) match {
433436 case Some (keyRange)
434- if symbolsCache.contains((symbol.trueName , keyRange)) => {
437+ if symbolsCache.contains((symbolName , keyRange)) => {
435438 println(" already found" )
436- (symbolsCache((symbol.trueName , keyRange)), symbol.isSemanticdbLocal)}
439+ (symbolsCache((symbolName , keyRange)), symbol.isSemanticdbLocal)}
437440 case Some (keyRange) => {
438- val (sp, ig) = symbolToSymbolString(symbol)
439- symbolsCache += ((symbol.trueName , keyRange) -> sp)
441+ val (sp, ig) = symbolToSymbolString(symbol, isMutableAssignement )
442+ symbolsCache += ((symbolName , keyRange) -> sp)
440443 (sp, ig)
441444 }
442445 case _ =>
@@ -476,11 +479,12 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
476479 def addOccurenceTree (tree : Tree ,
477480 type_symbol : s.SymbolOccurrence .Role ,
478481 range : s.Range ,
479- force_add : Boolean = false ): Unit = {
480- println(" coming from tree" )
482+ force_add : Boolean = false ,
483+ isMutableAssignement : Boolean = false ): Unit = {
484+ println(" coming from tree" , isMutableAssignement)
481485 if (tree.symbol.isUseful && (tree.isUserCreated || (force_add && ! (! tree.isUserCreated && iterateParent(
482486 tree.symbol) == " java/lang/Object#`<init>`()." )))) {
483- addOccurence(tree.symbol, type_symbol, range)
487+ addOccurence(tree.symbol, type_symbol, range, isMutableAssignement )
484488 }
485489 }
486490 def addOccurenceTypeTree (typetree : TypeTree ,
@@ -750,6 +754,8 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
750754 )
751755 }
752756
757+ var isAssignedTerm = false
758+
753759 override def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = {
754760 tree match {
755761 case Import (path, selectors) =>
@@ -894,10 +900,12 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
894900 typeparams.foreach(traverseTree)
895901 }
896902
897- /* case Term.Assign(lhs, rhs) => {
903+ case Term .Assign (lhs, rhs) => {
898904 println(" ASSIGN:" , lhs.symbol, lhs.symbol.flags, rhs.symbol, rhs.symbol.flags)
905+ isAssignedTerm = true
899906 super .traverseTree(tree)
900- }*/
907+ isAssignedTerm = false
908+ }
901909
902910 case IsDefinition (cdef) => {
903911
@@ -983,9 +991,13 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
983991 shouldForceAdd = qualifier.isUserCreated
984992 }
985993 }
986- println(" SELECT => " + tree + tree.pos.start + " :" + tree.pos.end)
994+ println(" SELECT => " + tree + tree.symbol.flags)
995+ println(" acc" , isAssignedTerm && tree.symbol.flags.is(Flags .Mutable ))
996+ val temp = isAssignedTerm
997+ isAssignedTerm = false
987998 super .traverseTree(tree)
988- addOccurenceTree(tree, s.SymbolOccurrence .Role .REFERENCE , range, shouldForceAdd)
999+ isAssignedTerm = temp
1000+ addOccurenceTree(tree, s.SymbolOccurrence .Role .REFERENCE , range, shouldForceAdd, isAssignedTerm && tree.symbol.flags.is(Flags .Mutable ))
9891001 }
9901002
9911003 case Term .Ident (name) => {
0 commit comments