@@ -341,7 +341,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
341
341
}
342
342
}
343
343
344
- def iterateParent (symbol : Symbol ): String = {
344
+ def iterateParent (symbol : Symbol , isMutableAssignement : Boolean = false ): String = {
345
345
if (symbol.name == " <none>" || symbol.name == " <root>" ) then {
346
346
// TODO had a "NoDenotation" test to avoid
347
347
// relying on the name itself
@@ -359,30 +359,32 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
359
359
360
360
361
361
val isdef = symbol match {case IsDefSymbol (_) => true case _ => false }
362
+ val symbolName = if (isMutableAssignement) symbol.trueName + " _=" else symbol.trueName
363
+ println(" =>" , symbolName)
362
364
val next_atom =
363
365
if (symbol.isPackage) {
364
- d.Package (symbol.trueName )
366
+ d.Package (symbolName )
365
367
} else if (symbol.isObject) {
366
368
symbol match {
367
369
case IsClassSymbol (classsymbol) =>
368
370
d.Term (resolveClass(classsymbol).trueName)
369
371
case _ =>
370
- d.Term (symbol.trueName )
372
+ d.Term (symbolName )
371
373
}
372
374
} else if (symbol.isValMethod && ! symbol.isVarAccessor) {
373
- d.Term (symbol.trueName )
375
+ d.Term (symbolName )
374
376
} else if (symbol.isMethod || symbol.isUsefulField || symbol.isVarAccessor) {
375
377
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))
378
380
} else if (symbol.isTypeParameter) {
379
- d.TypeParameter (symbol.trueName )
381
+ d.TypeParameter (symbolName )
380
382
} else if (symbol.isValueParameter) {
381
- d.Parameter (symbol.trueName )
383
+ d.Parameter (symbolName )
382
384
} else if (symbol.isType || symbol.isTrait) {
383
- d.Type (symbol.trueName )
385
+ d.Type (symbolName )
384
386
} else {
385
- d.Term (symbol.trueName )
387
+ d.Term (symbolName )
386
388
}
387
389
388
390
Symbols .Global (previous_symbol, next_atom)
@@ -411,32 +413,33 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
411
413
)
412
414
}
413
415
414
- def symbolToSymbolString (symbol : Symbol ): (String , Boolean ) = {
416
+ def symbolToSymbolString (symbol : Symbol , isMutableAssignement : Boolean = false ): (String , Boolean ) = {
415
417
if (symbol.isSemanticdbLocal) {
416
418
var localsymbol = Symbols .Local (local_offset.toString)
417
419
local_offset += 1
418
420
(localsymbol, false )
419
421
} else {
420
- (iterateParent(symbol), true )
422
+ (iterateParent(symbol, isMutableAssignement ), true )
421
423
}
422
424
}
423
425
424
426
def addOccurence (symbol : Symbol ,
425
427
type_symbol : s.SymbolOccurrence .Role ,
426
- range : s.Range ): Unit = {
428
+ range : s.Range ,
429
+ isMutableAssignement: Boolean = false ): Unit = {
427
430
if (symbol.name == " <none>" ) return
428
431
429
432
430
433
println(" ===> " , symbol, symbol.flags)
431
-
434
+ val symbolName = if (isMutableAssignement) symbol.trueName + " _= " else symbol.trueName
432
435
val (symbol_path, is_global) = posToRange(symbol.pos) match {
433
436
case Some (keyRange)
434
- if symbolsCache.contains((symbol.trueName , keyRange)) => {
437
+ if symbolsCache.contains((symbolName , keyRange)) => {
435
438
println(" already found" )
436
- (symbolsCache((symbol.trueName , keyRange)), symbol.isSemanticdbLocal)}
439
+ (symbolsCache((symbolName , keyRange)), symbol.isSemanticdbLocal)}
437
440
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)
440
443
(sp, ig)
441
444
}
442
445
case _ =>
@@ -476,11 +479,12 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
476
479
def addOccurenceTree (tree : Tree ,
477
480
type_symbol : s.SymbolOccurrence .Role ,
478
481
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)
481
485
if (tree.symbol.isUseful && (tree.isUserCreated || (force_add && ! (! tree.isUserCreated && iterateParent(
482
486
tree.symbol) == " java/lang/Object#`<init>`()." )))) {
483
- addOccurence(tree.symbol, type_symbol, range)
487
+ addOccurence(tree.symbol, type_symbol, range, isMutableAssignement )
484
488
}
485
489
}
486
490
def addOccurenceTypeTree (typetree : TypeTree ,
@@ -750,6 +754,8 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
750
754
)
751
755
}
752
756
757
+ var isAssignedTerm = false
758
+
753
759
override def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = {
754
760
tree match {
755
761
case Import (path, selectors) =>
@@ -894,10 +900,12 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
894
900
typeparams.foreach(traverseTree)
895
901
}
896
902
897
- /* case Term.Assign(lhs, rhs) => {
903
+ case Term .Assign (lhs, rhs) => {
898
904
println(" ASSIGN:" , lhs.symbol, lhs.symbol.flags, rhs.symbol, rhs.symbol.flags)
905
+ isAssignedTerm = true
899
906
super .traverseTree(tree)
900
- }*/
907
+ isAssignedTerm = false
908
+ }
901
909
902
910
case IsDefinition (cdef) => {
903
911
@@ -983,9 +991,13 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
983
991
shouldForceAdd = qualifier.isUserCreated
984
992
}
985
993
}
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
987
998
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 ))
989
1001
}
990
1002
991
1003
case Term .Ident (name) => {
0 commit comments