Skip to content

Commit eed1b6c

Browse files
committed
Also check definitions inside package objects
1 parent 74cfaea commit eed1b6c

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -727,15 +727,20 @@ object Checking {
727727
* all statements are @experimental definitions.
728728
*/
729729
def checkExperimentalImports(trees: List[Tree])(using Context): Unit =
730-
def onlyExperimentalDefs = trees.forall {
731-
case _: Import | EmptyTree => true
732-
case stat: MemberDef => stat.symbol.isExperimental || stat.symbol.is(Synthetic)
733-
case _ => false
730+
def onlyExperimentalDefs(trees: List[Tree]): Boolean = trees.forall {
731+
case _: Import | EmptyTree =>
732+
true
733+
case tree @ TypeDef(_, impl: Template) if tree.symbol.isPackageObject =>
734+
onlyExperimentalDefs(impl.body)
735+
case stat: MemberDef =>
736+
stat.symbol.isExperimental || stat.symbol.is(Synthetic)
737+
case _ =>
738+
false
734739
}
735740
for case imp @ Import(qual, selectors) <- trees do
736741
languageImport(qual) match
737742
case Some(nme.experimental)
738-
if !ctx.owner.isInExperimentalScope && !onlyExperimentalDefs
743+
if !ctx.owner.isInExperimentalScope && !onlyExperimentalDefs(trees)
739744
&& selectors.exists(sel => Feature.experimental(sel.name) != Feature.scala2macros) =>
740745
Feature.checkExperimentalFeature("features", imp.srcPos)
741746
case _ =>

0 commit comments

Comments
 (0)