@@ -66,10 +66,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
66
66
def isUserCreated : Boolean = {
67
67
val children : List [Position ] =
68
68
ChildTraverser .getChildren(tree)(reflect.rootContext).map(_.pos)
69
- /* println("call to isusercreated on " + iterateParent(tree.symbol))
70
- if (tree.pos.exists)
71
- println(tree.pos.start, tree.pos.end)
72
- println(children.map(x => (x.start, x.end)))*/
73
69
return ! ((tree.pos.exists && tree.pos.start == tree.pos.end && children == Nil ) || children
74
70
.exists(_ == tree.pos))
75
71
}
@@ -214,11 +210,15 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
214
210
}
215
211
}
216
212
213
+ /* the `isFieldForPrivateThis` is commented out otherwise class members of the form
214
+ "private[this] val foo" are not converted to symbol occurences.
215
+ In the original semanticdb this line is commented out.
216
+ */
217
217
def isScalacField (implicit ctx : Context ): Boolean = {
218
- val isFieldForPrivateThis = symbol.flags.is(Flags .PrivateLocal ) && symbol.isTerm && ! symbol.isMethod && ! symbol.isObject
218
+ // val isFieldForPrivateThis = symbol.flags.is(Flags.PrivateLocal) && symbol.isTerm && !symbol.isMethod && !symbol.isObject
219
219
val isFieldForOther = false // symbol.name.endsWith(g.nme.LOCAL_SUFFIX_STRING)
220
220
val isJavaDefined = symbol.flags.is(Flags .JavaDefined )
221
- (isFieldForPrivateThis || isFieldForOther) && ! isJavaDefined
221
+ (/* isFieldForPrivateThis ||*/ isFieldForOther) && ! isJavaDefined
222
222
}
223
223
def isUselessField (implicit ctx : Context ): Boolean = {
224
224
symbol.isScalacField && symbol.owner != NoSymbol
@@ -360,7 +360,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
360
360
361
361
val isdef = symbol match {case IsDefSymbol (_) => true case _ => false }
362
362
val symbolName = if (isMutableAssignement) symbol.trueName + " _=" else symbol.trueName
363
- println(" =>" , symbolName)
364
363
val next_atom =
365
364
if (symbol.isPackage) {
366
365
d.Package (symbolName)
@@ -374,7 +373,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
374
373
} else if (symbol.isValMethod && ! symbol.isVarAccessor) {
375
374
d.Term (symbolName)
376
375
} else if (symbol.isMethod || symbol.isUsefulField || symbol.isVarAccessor) {
377
- println(" METHOD" , symbol.isMethod, symbol.isUsefulField)
378
376
d.Method (symbolName,
379
377
disimbiguate(previous_symbol + symbolName, symbol))
380
378
} else if (symbol.isTypeParameter) {
@@ -435,7 +433,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
435
433
val (symbol_path, is_global) = posToRange(symbol.pos) match {
436
434
case Some (keyRange)
437
435
if symbolsCache.contains((symbolName, keyRange)) => {
438
- println(" already found" )
439
436
(symbolsCache((symbolName, keyRange)), symbol.isSemanticdbLocal)}
440
437
case Some (keyRange) => {
441
438
val (sp, ig) = symbolToSymbolString(symbol, isMutableAssignement)
@@ -446,7 +443,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
446
443
symbolToSymbolString(symbol)
447
444
}
448
445
449
- println(symbol_path, symbol.isUselessOccurrence)
450
446
// We want to add symbols coming from our file
451
447
// if (symbol.pos.sourceFile != sourceFile) return
452
448
if (symbol_path == " " /* || symbol.isUselessOccurrence*/ ) return
@@ -475,22 +471,39 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
475
471
)
476
472
}
477
473
474
+
475
+ /* Return true if symbol represents the definition of a var setter, false otherwise.
476
+ We return true if the extract of source code corresponding to the position of the symbol is the same as the symbol name.
477
+ Ex:
478
+ var m = ???
479
+ -> there is a defdef for `m_=` with position "m =". As "m =" != "m_=", we return false
480
+ */
481
+ def isMutableSetterExplicit (symbol : Symbol , role : s.SymbolOccurrence .Role ) = {
482
+ if (role == s.SymbolOccurrence .Role .DEFINITION &&
483
+ symbol.pos.exists &&
484
+ symbol.flags.is(Flags .Mutable ) && symbol.isMethod &&
485
+ symbol.trueName.endsWith(" _=" ))
486
+ (sourceCode.substring(symbol.pos.start, symbol.pos.end) == symbol.trueName)
487
+ else
488
+ true
489
+ }
490
+
478
491
val reservedFunctions : List [String ] = Nil
479
492
def addOccurenceTree (tree : Tree ,
480
493
type_symbol : s.SymbolOccurrence .Role ,
481
494
range : s.Range ,
482
495
force_add : Boolean = false ,
483
496
isMutableAssignement : Boolean = false ): Unit = {
484
- println(" coming from tree" , isMutableAssignement)
485
- if (tree.symbol.isUseful && (tree.isUserCreated || (force_add && ! (! tree.isUserCreated && iterateParent(
486
- tree.symbol) == " java/lang/Object#`<init>`()." )))) {
497
+ if (tree.symbol.isUseful &&
498
+ isMutableSetterExplicit(tree.symbol, type_symbol) &&
499
+ (tree.isUserCreated ||
500
+ (force_add && ! (! tree.isUserCreated && iterateParent(tree.symbol) == " java/lang/Object#`<init>`()." )))) {
487
501
addOccurence(tree.symbol, type_symbol, range, isMutableAssignement)
488
502
}
489
503
}
490
504
def addOccurenceTypeTree (typetree : TypeTree ,
491
505
type_symbol : s.SymbolOccurrence .Role ,
492
506
range : s.Range ): Unit = {
493
- println(" coming from type" )
494
507
if (typetree.symbol.isUseful && typetree.isUserCreated) {
495
508
addOccurence(typetree.symbol, type_symbol, range)
496
509
}
@@ -551,7 +564,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
551
564
552
565
def rangeSelect (name : String , range : Position ): s.Range = {
553
566
if (name == " <init>" ) {
554
- println(posToRange(range).get)
555
567
return posToRange(range).get
556
568
} else
557
569
/* The position of a select is the position of the whole select expression,
@@ -747,10 +759,12 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
747
759
def generateParamsPosMapping (cdef : DefDef )(implicit ctx : Context ): Map [String , s.Range ] = {
748
760
val DefDef (_, _, params, _, _) = cdef
749
761
val start = Map [String , s.Range ]()
750
- return params.foldLeft(start)((old, statements) =>
751
- return statements.foldLeft(old)((old, cval) =>
752
- return old + (cval.name -> range(cval, cval.symbol.pos, cval.symbol.trueName))
753
- )
762
+ params.foldLeft(start)((old, statements) => {
763
+ statements.foldLeft(old)((old, cval) => {
764
+ println(cval)
765
+ old + (cval.name -> range(cval, cval.symbol.pos, cval.symbol.trueName))
766
+ })
767
+ }
754
768
)
755
769
}
756
770
@@ -808,7 +822,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
808
822
constr.symbol.pos.endLine,
809
823
constr.symbol.pos.endColumn))
810
824
}*/
811
- println(tree.symbol.flags, cl.symbol.asClass.companionClass, tree.symbol, constr.pos.start, constr.pos.end)
812
825
813
826
disableConstrParamTraversal = true
814
827
traverseTree(constr)
@@ -860,25 +873,24 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
860
873
if (! tree.symbol.flags.is(Flags .Case )) {
861
874
classStacks = tree.symbol :: classStacks
862
875
863
- println(" \n >>>>>>>>>" + classStacks)
864
876
println(statements)
865
-
877
+ println( " " )
866
878
val paramsPosMapping = generateParamsPosMapping(constr)
867
-
868
- println(" #### " + paramsPosMapping )
879
+ println(paramsPosMapping)
880
+ println(" " )
869
881
870
882
statements.foreach(statement => {
871
883
if (statement.symbol.flags.is(Flags .ParamAccessor )) {
872
- println(" oki" , statement.symbol.pos)
873
884
if (paramsPosMapping.contains(statement.symbol.name)) {
885
+ println(" parameter " + statement)
874
886
addOccurence(statement.symbol, s.SymbolOccurrence .Role .DEFINITION , paramsPosMapping(statement.symbol.name))
875
887
}
876
888
// traverseTree(statement)
877
889
} else if (! statement.symbol.flags.is(Flags .Param )) {
890
+ println(statement.symbol, statement.symbol.flags)
878
891
traverseTree(statement)
879
892
}
880
893
})
881
- println(" <<<<<<<<<<" + classStacks + " \n " )
882
894
883
895
classStacks = classStacks.tail
884
896
}
@@ -901,14 +913,14 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
901
913
}
902
914
903
915
case Term .Assign (lhs, rhs) => {
904
- println(" ASSIGN:" , lhs.symbol, lhs.symbol.flags, rhs.symbol, rhs.symbol.flags)
905
916
isAssignedTerm = true
906
917
super .traverseTree(tree)
907
918
isAssignedTerm = false
908
919
}
909
920
910
921
case IsDefinition (cdef) => {
911
-
922
+ println(" definition " + cdef.symbol + " " + cdef.symbol.flags)
923
+ println(cdef.symbol.protectedWithin, cdef.symbol.privateWithin)
912
924
if (cdef.symbol.flags.is(Flags .Protected )) {
913
925
cdef.symbol.protectedWithin match {
914
926
case Some (within) => {
@@ -927,6 +939,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
927
939
} else {
928
940
cdef.symbol.privateWithin match {
929
941
case Some (within) => {
942
+ println(" YES" )
930
943
val startColumn = cdef.pos.startColumn + " private[" .length
931
944
addOccurence(
932
945
within.typeSymbol,
@@ -991,8 +1004,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
991
1004
shouldForceAdd = qualifier.isUserCreated
992
1005
}
993
1006
}
994
- println(" SELECT => " + tree + tree.symbol.flags)
995
- println(" acc" , isAssignedTerm && tree.symbol.flags.is(Flags .Mutable ))
996
1007
val temp = isAssignedTerm
997
1008
isAssignedTerm = false
998
1009
super .traverseTree(tree)
0 commit comments