@@ -806,20 +806,20 @@ object Checking {
806806   * 
807807   */  
808808  def  checkAndAdaptExperimentalImports (trees : List [Tree ])(using  Context ):  Unit  = 
809-     def  nonExperimentalTopLevelDefs (pack :  Symbol ):  Iterator [Symbol ] = 
810-       def   isNonExperimentalTopLevelDefinition ( sym :  Symbol )  = 
811-         sym.isDefinedInCurrentRun 
812-         &&   sym.source  ==  ctx.compilationUnit.source 
813-         &&   ! sym.isConstructor  //  not constructor of package object 
814-         &&   ! sym.is( Package )  &&   ! sym.name.isPackageObjectName 
815-         &&   ! sym.isExperimental 
816- 
817-       pack.info.decls.toList.iterator.flatMap :  sym  => 
818-         if  sym.isClass  &&  (sym.is( Package )  ||  sym.isPackageObject)  then 
819-           nonExperimentalTopLevelDefs(sym )
820-         else   if  isNonExperimentalTopLevelDefinition(sym)  then 
821-           sym  ::   Nil 
822-          else   Nil 
809+     def  nonExperimentalTopLevelDefs ():  List [Symbol ] = 
810+       new   TreeAccumulator [ List [ Symbol ]] { 
811+         override   def   apply ( x :  List [ Symbol ],  tree : tpd. Tree )( using   Context ) :   List [ Symbol ]  = 
812+            def   addIfNotExperimental ( sym :  Symbol )  = 
813+              if   ! sym.isExperimental  then  sym  ::  x 
814+              else  x 
815+           tree  match  { 
816+              case  tpd. PackageDef (_, contents)  =>  apply(x, contents) 
817+              case  typeDef  @  tpd. TypeDef (_,  temp :  Template )  if  typeDef.symbol.isPackageObject  => 
818+               apply(x, temp.body) 
819+              case   mdef : tpd. MemberDef   =>  addIfNotExperimental(mdef.symbol )
820+              case  _  =>  x 
821+           } 
822+       }.apply( Nil , ctx.compilationUnit.tpdTree) 
823823
824824    def  unitExperimentalLanguageImports  = 
825825      def  isAllowedImport (sel : untpd.ImportSelector ) = 
@@ -837,7 +837,7 @@ object Checking {
837837
838838    if  ctx.owner.is(Package ) ||  ctx.owner.name.startsWith(str.REPL_SESSION_LINE ) then 
839839      def  markTopLevelDefsAsExperimental (why : String ):  Unit  = 
840-         for  sym <-  nonExperimentalTopLevelDefs(ctx.owner ) do 
840+         for  sym <-  nonExperimentalTopLevelDefs() do 
841841          sym.addAnnotation(ExperimentalAnnotation (s " Added by  $why" , sym.span))
842842
843843      unitExperimentalLanguageImports match 
0 commit comments