@@ -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