@@ -91,13 +91,13 @@ class ExtractSemanticDB extends Phase {
9191 addDescriptor(sym.sourceModule)
9292 else if sym.is(TypeParam ) then
9393 b.append('[' ); addName(sym.name); b.append(']' )
94- else if sym.is(Param ) || sym.is( ParamAccessor ) then
94+ else if sym.is(Param ) then
9595 b.append('(' ); addName(sym.name); b.append(')' )
9696 else
9797 addName(sym.name)
9898 if sym.is(Package ) then b.append('/' )
9999 else if sym.isType then b.append('#' )
100- else if sym.is(Method ) && ( ! sym.is (Accessor ) || sym.is(Mutable )) then
100+ else if sym.is(Method ) || ( sym.isOneOf (Accessor | Local ) && sym.is(Mutable )) then
101101 b.append('(' ); addOverloadIdx(sym); b.append(" )." )
102102 else b.append('.' )
103103
@@ -152,11 +152,14 @@ class ExtractSemanticDB extends Phase {
152152 private def excludeDef (sym : Symbol )(given Context ): Boolean =
153153 ! sym.exists
154154 || sym.isLocalDummy
155- || sym.is(Synthetic )
156- || sym.isAnonymousClass
155+ || sym.is(Synthetic ) || (sym.owner.is(Synthetic ) && ! sym.isAllOf(EnumCase ))
156+ || sym.isAnonymous
157+ || sym.isPrimaryConstructor && excludeDef(sym.owner)
158+
159+ private def (sym : Symbol ) isAnonymous(given Context ): Boolean =
160+ sym.isAnonymousClass
157161 || sym.isAnonymousModuleVal
158162 || sym.isAnonymousFunction
159- || sym.isPrimaryConstructor && excludeDef(sym.owner)
160163
161164 /** Uses of this symbol where the reference has given span should be excluded from semanticdb */
162165 private def excludeUse (sym : Symbol , span : Span )(given Context ): Boolean =
@@ -196,6 +199,24 @@ class ExtractSemanticDB extends Phase {
196199 if ! excludeDef(tree.symbol) && tree.span.start != tree.span.end =>
197200 registerDefinition(tree.symbol, tree.nameSpan)
198201 traverseChildren(tree)
202+ case tree : (ValDef | DefDef | TypeDef ) if tree.symbol.is(Synthetic , butNot= Module ) && ! tree.symbol.isAnonymous => // skip
203+ case tree : Template =>
204+ for
205+ vparams <- tree.constr.vparamss
206+ vparam <- vparams
207+ do
208+ traverse(vparam.tpt) // the accessor symbol is traversed in the body
209+ for parent <- tree.parentsOrDerived do
210+ if
211+ parent.symbol != defn.ObjectClass .primaryConstructor
212+ && parent.tpe.dealias != defn.SerializableType
213+ && parent.symbol != defn.ProductClass
214+ then
215+ traverse(parent)
216+ val selfSpan = tree.self.span
217+ if selfSpan.exists && selfSpan.start != selfSpan.end then
218+ traverse(tree.self)
219+ tree.body.foreach(traverse)
199220 case tree : Ident =>
200221 if tree.name != nme.WILDCARD && ! excludeUse(tree.symbol, tree.span) then
201222 registerUse(tree.symbol, tree.span)
@@ -211,12 +232,13 @@ class ExtractSemanticDB extends Phase {
211232 registerUse(tree.symbol, Span (start max limit, end))
212233 traverseChildren(tree)
213234 case tree : Import =>
214- for sel <- tree.selectors do
215- val imported = sel.imported.name
216- if imported != nme.WILDCARD then
217- for alt <- tree.expr.tpe.member(imported).alternatives do
218- registerUse(alt.symbol, sel.imported.span)
219- registerPath(tree.expr)
235+ if tree.span.exists && tree.span.start != tree.span.end then
236+ for sel <- tree.selectors do
237+ val imported = sel.imported.name
238+ if imported != nme.WILDCARD then
239+ for alt <- tree.expr.tpe.member(imported).alternatives do
240+ registerUse(alt.symbol, sel.imported.span)
241+ registerPath(tree.expr)
220242 case tree : Inlined =>
221243 traverse(tree.call)
222244 case tree : PackageDef => tree.stats.foreach(traverse)
0 commit comments