@@ -59,14 +59,22 @@ class ExtractSemanticDB extends Phase {
5959 /** The symbol occurrences generated so far, as a set */
6060 private val generated = new mutable.HashSet [SymbolOccurrence ]
6161
62+ private val unicodeEscape = raw " \ $$ u(\p{XDigit}{4}) " .r
63+
6264 /** Add semanticdb name of the given symbol to string builder */
6365 private def addSymName (b : StringBuilder , sym : Symbol , inOwner : Boolean = false )(given ctx : Context ): Unit =
6466
6567 def isJavaIdent (str : String ) =
6668 isJavaIdentifierStart(str.head) && str.tail.forall(isJavaIdentifierPart)
6769
70+ def (name : Name ) unescapeUnicode = {
71+ unicodeEscape.replaceAllIn(name.toString, m =>
72+ String .valueOf(Integer .parseInt(m.group(1 ), 16 ).toChar)
73+ )
74+ }
75+
6876 def addName (name : Name ) =
69- val str = name.toString
77+ val str = name.unescapeUnicode
7078 if isJavaIdent(str) then b.append(str)
7179 else b.append('`' ).append(str).append('`' )
7280
@@ -79,8 +87,8 @@ class ExtractSemanticDB extends Phase {
7987 if ! owner.isRoot then addSymName(b, owner, inOwner = true )
8088
8189 def addOverloadIdx (sym : Symbol ): Unit =
82- val alts = sym.owner.info.decls.lookupAll(sym.name).toList.reverse
83- if alts.tail.nonEmpty then
90+ val alts = sym.owner.info.decls.lookupAll(sym.name).filter(_.is( Method )). toList.reverse
91+ if alts.nonEmpty && alts. tail.nonEmpty then
8492 val idx = alts.indexOf(sym)
8593 assert(idx >= 0 )
8694 if idx > 0 then
@@ -161,6 +169,9 @@ class ExtractSemanticDB extends Phase {
161169 private def excludeDefStrict (sym : Symbol )(given Context ): Boolean =
162170 sym.name.is(NameKinds .DefaultGetterName )
163171 || sym == defn.Predef_classOf
172+
173+ private def blacklistPrefix (sym : Symbol )(given Context ): Boolean =
174+ sym.is(Package )
164175 || sym == defn.ScalaPredefModule
165176 || sym == defn.StringContextModule
166177
@@ -191,7 +202,7 @@ class ExtractSemanticDB extends Phase {
191202 def registerPath (expr : Tree ): Unit = expr match
192203 case t @ Select (expr, _) =>
193204 registerUse(t.symbol, t.span)
194- if ! expr.symbol.is( Package ) then
205+ if ! blacklistPrefix( expr.symbol) then
195206 registerPath(expr)
196207
197208 case _ =>
@@ -239,7 +250,7 @@ class ExtractSemanticDB extends Phase {
239250 if source.content()(end - 1 ) == '`' then end - len - 1 else end - len
240251 else limit
241252 registerUse(tree.symbol, Span (start max limit, end))
242- if ! tree.qualifier.symbol.is( Package ) then
253+ if ! blacklistPrefix( tree.qualifier.symbol) then
243254 traverseChildren(tree)
244255 case tree : Import =>
245256 if tree.span.exists && tree.span.start != tree.span.end then
@@ -250,7 +261,7 @@ class ExtractSemanticDB extends Phase {
250261 registerUse(alt.symbol, sel.imported.span)
251262 if (alt.symbol.companionClass.exists)
252263 registerUse(alt.symbol.companionClass, sel.imported.span)
253- if ! tree.expr.symbol.is( Package ) then
264+ if ! blacklistPrefix( tree.expr.symbol) then
254265 registerPath(tree.expr)
255266 case tree : Inlined =>
256267 traverse(tree.call)
0 commit comments