Skip to content

Commit 96854ef

Browse files
authored
Merge pull request #2555 from dotty-staging/fix-2551
Fix 2551: shortcut staticRef for packages to avoid cycles
2 parents e4bcbda + 9b3aa11 commit 96854ef

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

compiler/src/dotty/tools/dotc/core/Denotations.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,11 +1185,11 @@ object Denotations {
11851185
* or a MissingRef or NoQualifyingRef instance, if it does not exist.
11861186
* if generateStubs is set, generates stubs for missing top-level symbols
11871187
*/
1188-
def staticRef(path: Name, generateStubs: Boolean = true)(implicit ctx: Context): Denotation = {
1188+
def staticRef(path: Name, generateStubs: Boolean = true, isPackage: Boolean = false)(implicit ctx: Context): Denotation = {
11891189
def select(prefix: Denotation, selector: Name): Denotation = {
11901190
val owner = prefix.disambiguate(_.info.isParameterless)
11911191
if (owner.exists) {
1192-
val result = owner.info.member(selector)
1192+
val result = if (isPackage) owner.info.decl(selector) else owner.info.member(selector)
11931193
if (result.exists) result
11941194
else {
11951195
val alt =

compiler/src/dotty/tools/dotc/core/Symbols.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ trait Symbols { this: Context =>
357357
// ----- Locating predefined symbols ----------------------------------------
358358

359359
def requiredPackage(path: PreName): TermSymbol =
360-
base.staticRef(path.toTermName).requiredSymbol(_ is Package).asTerm
360+
base.staticRef(path.toTermName, isPackage = true).requiredSymbol(_ is Package).asTerm
361361

362362
def requiredPackageRef(path: PreName): TermRef = requiredPackage(path).termRef
363363

tests/pos/i2551/library_1.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package scala {
2+
package meta {
3+
package config {
4+
case class Version()
5+
6+
trait Aliases {
7+
type Version = scala.meta.config.Version
8+
val Version = scala.meta.config.Version
9+
}
10+
}
11+
}
12+
13+
package object meta extends scala.meta.config.Aliases
14+
}

tests/pos/i2551/test_2.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import scala.meta._
2+
3+
object Test {
4+
val v = Version()
5+
}

0 commit comments

Comments
 (0)