Skip to content

Commit 51498d2

Browse files
committed
Fix #3736: Fix owner checking logic
1 parent ad96b03 commit 51498d2

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,16 +292,19 @@ trait TypeOps { this: Context => // TODO: Make standalone object.
292292
if (!sym.exists || (sym eq defn.LanguageModuleClass)) ""
293293
else toPrefix(sym.owner) + sym.name + "."
294294
def featureName = toPrefix(owner) + feature
295-
def hasImport(implicit ctx: Context): Boolean =
296-
ctx.importInfo != null && {
297-
ctx.importInfo.site.widen.typeSymbol == owner &&
298-
!ctx.importInfo.excluded.contains(feature) &&
299-
ctx.importInfo.originals.contains(feature) || {
295+
def hasImport(implicit ctx: Context): Boolean = {
296+
if (ctx.importInfo eq null) false
297+
else {
298+
val isImportOwner = ctx.importInfo.site.widen.typeSymbol eq owner
299+
if (isImportOwner && ctx.importInfo.excluded.contains(feature)) false
300+
else if (isImportOwner && ctx.importInfo.originals.contains(feature)) true
301+
else {
300302
var c = ctx.outer
301303
while (c.importInfo eq ctx.importInfo) c = c.outer
302304
hasImport(c)
303305
}
304306
}
307+
}
305308
def hasOption = ctx.base.settings.language.value exists (s => s == featureName || s == "_")
306309
hasImport(ctx.withPhase(ctx.typerPhase)) || hasOption
307310
}

tests/neg/i3736b.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import foo.dynamics
2+
3+
class Foo() extends Dynamic // error: extension of type scala.Dynamic needs to be enabled
4+
5+
package foo {
6+
class dynamic
7+
}

0 commit comments

Comments
 (0)