@@ -804,20 +804,22 @@ object Checking {
804
804
*
805
805
*/
806
806
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
821
823
822
824
def unitExperimentalLanguageImports =
823
825
def isAllowedImport (sel : untpd.ImportSelector ) =
@@ -835,7 +837,7 @@ object Checking {
835
837
836
838
if ctx.owner.is(Package ) || ctx.owner.name.startsWith(str.REPL_SESSION_LINE ) then
837
839
def markTopLevelDefsAsExperimental (why : String ): Unit =
838
- for sym <- nonExperimentalTopLevelDefs(ctx.owner ) do
840
+ for sym <- nonExperimentalTopLevelDefs() do
839
841
sym.addAnnotation(ExperimentalAnnotation (s " Added by $why" , sym.span))
840
842
841
843
unitExperimentalLanguageImports match
0 commit comments