Skip to content

Commit 2287e5c

Browse files
committed
exclude default getters
1 parent cbde723 commit 2287e5c

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class ExtractSemanticDB extends Phase {
6666
isJavaIdentifierStart(str.head) && str.tail.forall(isJavaIdentifierPart)
6767

6868
def addName(name: Name) =
69-
val str = name.toString.replaceAllLiterally("package","<???>")
69+
val str = name.toString
7070
if isJavaIdent(str) then b.append(str)
7171
else b.append('`').append(str).append('`')
7272

@@ -157,15 +157,19 @@ class ExtractSemanticDB extends Phase {
157157
|| sym.is(Synthetic) || (sym.owner.is(Synthetic) && !sym.isAllOf(EnumCase))
158158
|| sym.isAnonymous
159159
|| sym.isPrimaryConstructor && excludeDef(sym.owner)
160+
|| excludeDefStrict(sym)
161+
162+
private def excludeDefStrict(sym: Symbol)(given Context): Boolean =
163+
sym.name.is(NameKinds.DefaultGetterName)
160164

161165
private def (sym: Symbol) isAnonymous(given Context): Boolean =
162166
sym.isAnonymousClass
163167
|| sym.isAnonymousModuleVal
164168
|| sym.isAnonymousFunction
165169

166170
/** Uses of this symbol where the reference has given span should be excluded from semanticdb */
167-
private def excludeUse(sym: Symbol, span: Span)(given Context): Boolean =
168-
excludeDef(sym) && span.start == span.end
171+
private def excludeUseStrict(sym: Symbol, span: Span)(given Context): Boolean =
172+
excludeDefStrict(sym) || (excludeDef(sym) && span.start == span.end)
169173

170174
private def registerOccurrence(sym: Symbol, span: Span, role: SymbolOccurrence.Role)(given Context): Unit =
171175
val occ = SymbolOccurrence(symbolName(sym), range(span), role)
@@ -174,7 +178,7 @@ class ExtractSemanticDB extends Phase {
174178
generated += occ
175179

176180
private def registerUse(sym: Symbol, span: Span)(given Context) =
177-
if !excludeUse(sym, span) && !isWildcard(sym.name) then
181+
if !excludeUseStrict(sym, span) && !isWildcard(sym.name) then
178182
registerOccurrence(sym, span, SymbolOccurrence.Role.REFERENCE)
179183

180184
private def registerDefinition(sym: Symbol, span: Span)(given Context) =
@@ -220,10 +224,10 @@ class ExtractSemanticDB extends Phase {
220224
traverse(tree.self)
221225
tree.body.foreach(traverse)
222226
case tree: Ident =>
223-
if tree.name != nme.WILDCARD && !excludeUse(tree.symbol, tree.span) then
227+
if tree.name != nme.WILDCARD && !excludeUseStrict(tree.symbol, tree.span) then
224228
registerUse(tree.symbol, tree.span)
225229
case tree: Select =>
226-
if !excludeUse(tree.symbol, tree.span) then
230+
if !excludeUseStrict(tree.symbol, tree.span) then
227231
val end = tree.span.end
228232
val limit = tree.qualifier.span.end
229233
val start =
@@ -240,6 +244,8 @@ class ExtractSemanticDB extends Phase {
240244
if imported != nme.WILDCARD then
241245
for alt <- tree.expr.tpe.member(imported).alternatives do
242246
registerUse(alt.symbol, sel.imported.span)
247+
if (alt.symbol.companionClass.exists)
248+
registerUse(alt.symbol.companionClass, sel.imported.span)
243249
registerPath(tree.expr)
244250
case tree: Inlined =>
245251
traverse(tree.call)

tests/semanticdb/Example.expect.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package example
2+
3+
import scala.concurrent/*=>>scala.concurrent.*/.Future/*=>>scala.concurrent.Future.*//*=>>scala.concurrent.Future#*/
4+
5+
object Example/*<<=example.Example.*/ { /*=>>example.Example.*/self/*<<=local0*/ =>
6+
new /*=>>scala.collection.mutable.Stack.*/scala/*=>>scala.*/.collection/*=>>scala.collection.*/.mutable/*=>>scala.collection.mutable.*/.Stack/*=>>scala.collection.mutable.Stack#*/[Int/*=>>scala.Int#*/]/*=>>scala.collection.mutable.Stack#`<init>`(+1).*/()
7+
def main/*<<=example.Example.main().*/(args/*<<=example.Example.main().(args)*/: Array/*=>>scala.Array#*/[String/*=>>scala.Predef.String#*/]): Unit/*=>>scala.Unit#*/ = {
8+
println/*=>>scala.Predef.println(+1).*/(1)
9+
}
10+
val x/*<<=example.Example.x.*/ = scala/*=>>scala.*/.reflect/*=>>scala.reflect.*/.classTag/*=>>scala.reflect.classTag().*/[Int/*=>>scala.Int#*/]/*=>>scala.reflect.ClassTag.apply().*//*=>>scala.reflect.ClassTag.*//*=>>java.lang.Integer.TYPE.*//*=>>java.lang.Integer.*/
11+
}

tests/semanticdb/Example.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package example
2+
3+
import scala.concurrent.Future
4+
5+
object Example { self =>
6+
new scala.collection.mutable.Stack[Int]()
7+
def main(args: Array[String]): Unit = {
8+
println(1)
9+
}
10+
val x = scala.reflect.classTag[Int]
11+
}

0 commit comments

Comments
 (0)