diff --git a/compiler/src/dotty/tools/dotc/interactive/Completion.scala b/compiler/src/dotty/tools/dotc/interactive/Completion.scala index 133e366ff199..9fda94cb08d4 100644 --- a/compiler/src/dotty/tools/dotc/interactive/Completion.scala +++ b/compiler/src/dotty/tools/dotc/interactive/Completion.scala @@ -23,7 +23,6 @@ import dotty.tools.dotc.util.SourcePosition import scala.collection.mutable import scala.util.control.NonFatal -import dotty.tools.dotc.core.Types.TypeRef /** * One of the results of a completion query. @@ -481,7 +480,11 @@ object Completion { private def accessibleMembers(site: Type)(using Context): Seq[SingleDenotation] = { def appendMemberSyms(name: Name, buf: mutable.Buffer[SingleDenotation]): Unit = try - buf ++= site.member(name).alternatives + val member = site.member(name) + if member.symbol.is(ParamAccessor) && !member.symbol.isAccessibleFrom(site) then + buf ++= site.nonPrivateMember(name).alternatives + else + buf ++= member.alternatives catch case ex: TypeError => diff --git a/language-server/test/dotty/tools/languageserver/CompletionTest.scala b/language-server/test/dotty/tools/languageserver/CompletionTest.scala index fd6b4c958278..730025a40434 100644 --- a/language-server/test/dotty/tools/languageserver/CompletionTest.scala +++ b/language-server/test/dotty/tools/languageserver/CompletionTest.scala @@ -1275,4 +1275,14 @@ class CompletionTest { .noCompletions() } + @Test def singleDenotNoCompletions: Unit = { + code"""class Test(val symbol: String) + |class BetterTest(symbol: Int) extends Test(symbol.toString): + | symb$m1 + |object O: + | def t(test: BetterTest) = test.symb$m2""" + .completion(m1, ("symbol", Field, "Int")) + .completion(m2, ("symbol", Field, "String")) + } + }