@@ -66,10 +66,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
6666 def isUserCreated : Boolean = {
6767 val children : List [Position ] =
6868 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)))*/
7369 return ! ((tree.pos.exists && tree.pos.start == tree.pos.end && children == Nil ) || children
7470 .exists(_ == tree.pos))
7571 }
@@ -214,11 +210,15 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
214210 }
215211 }
216212
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+ */
217217 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
219219 val isFieldForOther = false // symbol.name.endsWith(g.nme.LOCAL_SUFFIX_STRING)
220220 val isJavaDefined = symbol.flags.is(Flags .JavaDefined )
221- (isFieldForPrivateThis || isFieldForOther) && ! isJavaDefined
221+ (/* isFieldForPrivateThis ||*/ isFieldForOther) && ! isJavaDefined
222222 }
223223 def isUselessField (implicit ctx : Context ): Boolean = {
224224 symbol.isScalacField && symbol.owner != NoSymbol
@@ -360,7 +360,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
360360
361361 val isdef = symbol match {case IsDefSymbol (_) => true case _ => false }
362362 val symbolName = if (isMutableAssignement) symbol.trueName + " _=" else symbol.trueName
363- println(" =>" , symbolName)
364363 val next_atom =
365364 if (symbol.isPackage) {
366365 d.Package (symbolName)
@@ -374,7 +373,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
374373 } else if (symbol.isValMethod && ! symbol.isVarAccessor) {
375374 d.Term (symbolName)
376375 } else if (symbol.isMethod || symbol.isUsefulField || symbol.isVarAccessor) {
377- println(" METHOD" , symbol.isMethod, symbol.isUsefulField)
378376 d.Method (symbolName,
379377 disimbiguate(previous_symbol + symbolName, symbol))
380378 } else if (symbol.isTypeParameter) {
@@ -435,7 +433,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
435433 val (symbol_path, is_global) = posToRange(symbol.pos) match {
436434 case Some (keyRange)
437435 if symbolsCache.contains((symbolName, keyRange)) => {
438- println(" already found" )
439436 (symbolsCache((symbolName, keyRange)), symbol.isSemanticdbLocal)}
440437 case Some (keyRange) => {
441438 val (sp, ig) = symbolToSymbolString(symbol, isMutableAssignement)
@@ -446,7 +443,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
446443 symbolToSymbolString(symbol)
447444 }
448445
449- println(symbol_path, symbol.isUselessOccurrence)
450446 // We want to add symbols coming from our file
451447 // if (symbol.pos.sourceFile != sourceFile) return
452448 if (symbol_path == " " /* || symbol.isUselessOccurrence*/ ) return
@@ -475,22 +471,39 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
475471 )
476472 }
477473
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+
478491 val reservedFunctions : List [String ] = Nil
479492 def addOccurenceTree (tree : Tree ,
480493 type_symbol : s.SymbolOccurrence .Role ,
481494 range : s.Range ,
482495 force_add : Boolean = false ,
483496 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>`()." )))) {
487501 addOccurence(tree.symbol, type_symbol, range, isMutableAssignement)
488502 }
489503 }
490504 def addOccurenceTypeTree (typetree : TypeTree ,
491505 type_symbol : s.SymbolOccurrence .Role ,
492506 range : s.Range ): Unit = {
493- println(" coming from type" )
494507 if (typetree.symbol.isUseful && typetree.isUserCreated) {
495508 addOccurence(typetree.symbol, type_symbol, range)
496509 }
@@ -551,7 +564,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
551564
552565 def rangeSelect (name : String , range : Position ): s.Range = {
553566 if (name == " <init>" ) {
554- println(posToRange(range).get)
555567 return posToRange(range).get
556568 } else
557569 /* 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 {
747759 def generateParamsPosMapping (cdef : DefDef )(implicit ctx : Context ): Map [String , s.Range ] = {
748760 val DefDef (_, _, params, _, _) = cdef
749761 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+ }
754768 )
755769 }
756770
@@ -808,7 +822,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
808822 constr.symbol.pos.endLine,
809823 constr.symbol.pos.endColumn))
810824 }*/
811- println(tree.symbol.flags, cl.symbol.asClass.companionClass, tree.symbol, constr.pos.start, constr.pos.end)
812825
813826 disableConstrParamTraversal = true
814827 traverseTree(constr)
@@ -860,25 +873,24 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
860873 if (! tree.symbol.flags.is(Flags .Case )) {
861874 classStacks = tree.symbol :: classStacks
862875
863- println(" \n >>>>>>>>>" + classStacks)
864876 println(statements)
865-
877+ println( " " )
866878 val paramsPosMapping = generateParamsPosMapping(constr)
867-
868- println(" #### " + paramsPosMapping )
879+ println(paramsPosMapping)
880+ println(" " )
869881
870882 statements.foreach(statement => {
871883 if (statement.symbol.flags.is(Flags .ParamAccessor )) {
872- println(" oki" , statement.symbol.pos)
873884 if (paramsPosMapping.contains(statement.symbol.name)) {
885+ println(" parameter " + statement)
874886 addOccurence(statement.symbol, s.SymbolOccurrence .Role .DEFINITION , paramsPosMapping(statement.symbol.name))
875887 }
876888 // traverseTree(statement)
877889 } else if (! statement.symbol.flags.is(Flags .Param )) {
890+ println(statement.symbol, statement.symbol.flags)
878891 traverseTree(statement)
879892 }
880893 })
881- println(" <<<<<<<<<<" + classStacks + " \n " )
882894
883895 classStacks = classStacks.tail
884896 }
@@ -901,14 +913,14 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
901913 }
902914
903915 case Term .Assign (lhs, rhs) => {
904- println(" ASSIGN:" , lhs.symbol, lhs.symbol.flags, rhs.symbol, rhs.symbol.flags)
905916 isAssignedTerm = true
906917 super .traverseTree(tree)
907918 isAssignedTerm = false
908919 }
909920
910921 case IsDefinition (cdef) => {
911-
922+ println(" definition " + cdef.symbol + " " + cdef.symbol.flags)
923+ println(cdef.symbol.protectedWithin, cdef.symbol.privateWithin)
912924 if (cdef.symbol.flags.is(Flags .Protected )) {
913925 cdef.symbol.protectedWithin match {
914926 case Some (within) => {
@@ -927,6 +939,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
927939 } else {
928940 cdef.symbol.privateWithin match {
929941 case Some (within) => {
942+ println(" YES" )
930943 val startColumn = cdef.pos.startColumn + " private[" .length
931944 addOccurence(
932945 within.typeSymbol,
@@ -991,8 +1004,6 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
9911004 shouldForceAdd = qualifier.isUserCreated
9921005 }
9931006 }
994- println(" SELECT => " + tree + tree.symbol.flags)
995- println(" acc" , isAssignedTerm && tree.symbol.flags.is(Flags .Mutable ))
9961007 val temp = isAssignedTerm
9971008 isAssignedTerm = false
9981009 super .traverseTree(tree)
0 commit comments