Skip to content

Commit 86bd57d

Browse files
committed
fix scala#8954 use tree source, look inside byname arguments
1 parent 5fb865b commit 86bd57d

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ class ExtractSemanticDB extends Phase:
114114

115115
override def traverse(tree: Tree)(using Context): Unit =
116116

117-
inline def traverseCtorParamTpt(ctorSym: Symbol, tpt: Tree): Unit =
118-
val tptSym = tpt.symbol
117+
def traverseCtorParamTpt(ctorSym: Symbol, tpt: Tree)(using Context): Unit =
118+
val tptSym = tpt match
119+
case ByNameTypeTree(tpt) => tpt.symbol
120+
case tpt => tpt.symbol
119121
if tptSym.owner == ctorSym
120122
val found = matchingMemberType(tptSym, ctorSym.owner)
121123
if tpt.span.hasLength
@@ -131,7 +133,7 @@ class ExtractSemanticDB extends Phase:
131133
&& tree.pid.span.hasLength
132134
tree.pid match
133135
case tree @ Select(qual, name) =>
134-
registerDefinition(tree.symbol, adjustSpanToName(tree.span, qual.span, name), Set.empty)
136+
registerDefinition(tree.symbol, adjustSpanToName(tree.span, qual.span, name, tree.source), Set.empty)
135137
traverse(qual)
136138
case tree => registerDefinition(tree.symbol, tree.span, Set.empty)
137139
tree.stats.foreach(traverse)
@@ -206,7 +208,7 @@ class ExtractSemanticDB extends Phase:
206208
val lhs = tree.lhs.symbol
207209
val setter = lhs.matchingSetter.orElse(lhs)
208210
tree.lhs match
209-
case tree @ Select(qual, name) => registerUse(setter, adjustSpanToName(tree.span, qual.span, name))
211+
case tree @ Select(qual, name) => registerUse(setter, adjustSpanToName(tree.span, qual.span, name, tree.source))
210212
case tree => registerUse(setter, tree.span)
211213
traverseChildren(tree.lhs)
212214
traverse(tree.rhs)
@@ -217,7 +219,7 @@ class ExtractSemanticDB extends Phase:
217219
case tree: Select =>
218220
val qualSpan = tree.qualifier.span
219221
val sym = tree.symbol.adjustIfCtorTyparam
220-
registerUseGuarded(tree.qualifier.symbol.ifExists, sym, adjustSpanToName(tree.span, qualSpan, tree.name))
222+
registerUseGuarded(tree.qualifier.symbol.ifExists, sym, adjustSpanToName(tree.span, qualSpan, tree.name, tree.source))
221223
if qualSpan.exists && qualSpan.hasLength then
222224
traverse(tree.qualifier)
223225
case tree: Import =>
@@ -502,7 +504,7 @@ class ExtractSemanticDB extends Phase:
502504
}).toMap
503505
end findGetters
504506

505-
private def adjustSpanToName(span: Span, qualSpan: Span, name: Name)(using Context) =
507+
private def adjustSpanToName(span: Span, qualSpan: Span, name: Name, source: SourceFile) =
506508
val end = span.end
507509
val limit = qualSpan.end
508510
val start =
@@ -559,8 +561,8 @@ class ExtractSemanticDB extends Phase:
559561
case _ =>
560562
symkinds.toSet
561563

562-
private inline def ctorParams(
563-
vparamss: List[List[ValDef]], body: List[Tree])(traverseTpt: => Tree => Unit)(using Context): Unit =
564+
private def ctorParams(
565+
vparamss: List[List[ValDef]], body: List[Tree])(traverseTpt: Tree => Unit)(using Context): Unit =
564566
@tu lazy val getters = findGetters(vparamss.flatMap(_.map(_.name)).toSet, body)
565567
for
566568
vparams <- vparamss

0 commit comments

Comments
 (0)