diff --git a/compiler/src/dotty/tools/dotc/transform/SymUtils.scala b/compiler/src/dotty/tools/dotc/transform/SymUtils.scala index cf932dcf3c74..0d126c814e73 100644 --- a/compiler/src/dotty/tools/dotc/transform/SymUtils.scala +++ b/compiler/src/dotty/tools/dotc/transform/SymUtils.scala @@ -150,8 +150,9 @@ class SymUtils(val self: Symbol) extends AnyVal { /** Is symbol directly or indirectly owned by a term symbol? */ @tailrec final def isLocal(implicit ctx: Context): Boolean = { - val owner = self.owner - if (owner.isTerm) true + val owner = self.maybeOwner + if (!owner.exists) false + else if (owner.isTerm) true else if (owner.is(Package)) false else owner.isLocal } diff --git a/language-server/test/dotty/tools/languageserver/DefinitionTest.scala b/language-server/test/dotty/tools/languageserver/DefinitionTest.scala index 9e390434c410..064fc7393b98 100644 --- a/language-server/test/dotty/tools/languageserver/DefinitionTest.scala +++ b/language-server/test/dotty/tools/languageserver/DefinitionTest.scala @@ -367,4 +367,15 @@ class DefinitionTest { .definition(m17 to m18, List(m11 to m12)) .definition(m19 to m20, List(m13 to m14)) } + + @Test def definitionDoesNotExist: Unit = withSources( + code"""object Foo { + | ${m1}unknown1${m2} + | ${m3}unknown2${m4}.${m5}unknown3${m6} + | Foo.${m7}unknown4${m8} + |}""") + .definition(m1 to m2, Nil) + .definition(m3 to m4, Nil) + .definition(m5 to m6, Nil) + .definition(m7 to m8, Nil) }