@@ -804,20 +804,22 @@ object Checking {
804804   * 
805805   */  
806806  def  checkAndAdaptExperimentalImports (trees : List [Tree ])(using  Context ):  Unit  = 
807-     def  nonExperimentalTopLevelDefs (pack : Symbol ):  Iterator [Symbol ] = 
808-       def  isNonExperimentalTopLevelDefinition (sym : Symbol ) = 
809-         sym.isDefinedInCurrentRun
810-         &&  sym.source ==  ctx.compilationUnit.source
811-         &&  ! sym.isConstructor //  not constructor of package object
812-         &&  ! sym.is(Package ) &&  ! sym.name.isPackageObjectName
813-         &&  ! sym.isExperimental
814- 
815-       pack.info.decls.toList.iterator.flatMap:  sym => 
816-         if  sym.isClass &&  (sym.is(Package ) ||  sym.isPackageObject) then 
817-           nonExperimentalTopLevelDefs(sym)
818-         else  if  isNonExperimentalTopLevelDefinition(sym) then 
819-           sym ::  Nil 
820-         else  Nil 
807+     def  nonExperimentalTopLevelDefs ():  Iterator [Symbol ] = 
808+       new  TreeAccumulator [List [Symbol ]] {
809+         override  def  apply (x : List [Symbol ], tree : tpd.Tree )(using  Context ):  List [Symbol ] = 
810+           tree match  {
811+             case  tpd.PackageDef (_, contents) => 
812+               super .apply(x, contents)
813+             case  a @  tpd.TypeDef (_, temp : Template ) if  a.symbol.isPackageObject => 
814+               super .apply(x, temp.body)
815+             case  a @  tpd.TypeDef (_, Template (_, _, _, _)) => 
816+               val  sym  =  a.symbol
817+               if  ! sym.isExperimental then 
818+                 sym ::  x
819+               else  x
820+             case  _ =>  x
821+           }
822+       }.apply(Nil , ctx.compilationUnit.tpdTree).iterator
821823
822824    def  unitExperimentalLanguageImports  = 
823825      def  isAllowedImport (sel : untpd.ImportSelector ) = 
@@ -835,7 +837,7 @@ object Checking {
835837
836838    if  ctx.owner.is(Package ) ||  ctx.owner.name.startsWith(str.REPL_SESSION_LINE ) then 
837839      def  markTopLevelDefsAsExperimental (why : String ):  Unit  = 
838-         for  sym <-  nonExperimentalTopLevelDefs(ctx.owner ) do 
840+         for  sym <-  nonExperimentalTopLevelDefs() do 
839841          sym.addAnnotation(ExperimentalAnnotation (s " Added by  $why" , sym.span))
840842
841843      unitExperimentalLanguageImports match 
0 commit comments