@@ -18,9 +18,6 @@ class CrossVersionChecks extends MiniPhase:
1818
1919 override def description : String = CrossVersionChecks .description
2020
21- override def runsAfterGroupsOf : Set [String ] = Set (FirstTransform .name)
22- // We assume all type trees except TypeTree have been eliminated
23-
2421 // Note: if a symbol has both @deprecated and @migration annotations and both
2522 // warnings are enabled, only the first one checked here will be emitted.
2623 // I assume that's a consequence of some code trying to avoid noise by suppressing
@@ -69,18 +66,8 @@ class CrossVersionChecks extends MiniPhase:
6966 val since = annot.argumentConstant(1 ).map(" since " + _.stringValue).getOrElse(" " )
7067 report.deprecationWarning(em " ${sym.showLocated} is deprecated ${since}${msg}" , pos)
7168
72- private def checkExperimentalSignature (sym : Symbol , pos : SrcPos )(using Context ): Unit =
73- class Checker extends TypeTraverser :
74- def traverse (tp : Type ): Unit =
75- if tp.typeSymbol.isExperimental then
76- Feature .checkExperimentalDef(tp.typeSymbol, pos)
77- else
78- traverseChildren(tp)
79- if ! sym.isInExperimentalScope then
80- new Checker ().traverse(sym.info)
81-
8269 private def checkExperimentalAnnots (sym : Symbol )(using Context ): Unit =
83- if ! sym.isInExperimentalScope then
70+ if sym.exists && ! sym.isInExperimentalScope then
8471 for annot <- sym.annotations if annot.symbol.isExperimental do
8572 Feature .checkExperimentalDef(annot.symbol, annot.tree)
8673
@@ -119,13 +106,16 @@ class CrossVersionChecks extends MiniPhase:
119106 override def transformValDef (tree : ValDef )(using Context ): ValDef =
120107 checkDeprecatedOvers(tree)
121108 checkExperimentalAnnots(tree.symbol)
122- checkExperimentalSignature(tree.symbol, tree)
123109 tree
124110
125111 override def transformDefDef (tree : DefDef )(using Context ): DefDef =
126112 checkDeprecatedOvers(tree)
127113 checkExperimentalAnnots(tree.symbol)
128- checkExperimentalSignature(tree.symbol, tree)
114+ tree
115+
116+ override def transformTypeDef (tree : TypeDef )(using Context ): TypeDef =
117+ // TODO do we need to check checkDeprecatedOvers(tree)?
118+ checkExperimentalAnnots(tree.symbol)
129119 tree
130120
131121 override def transformIdent (tree : Ident )(using Context ): Ident = {
@@ -157,19 +147,14 @@ class CrossVersionChecks extends MiniPhase:
157147 tree
158148 }
159149
160- override def transformTypeDef (tree : TypeDef )(using Context ): TypeDef = {
161- checkExperimentalAnnots(tree.symbol)
150+ override def transformOther (tree : Tree )(using Context ): Tree =
151+ tree.foreachSubTree { // Find references in type trees and imports
152+ case tree : Ident => transformIdent(tree)
153+ case tree : Select => transformSelect(tree)
154+ case tree : TypeTree => transformTypeTree(tree)
155+ case _ =>
156+ }
162157 tree
163- }
164-
165- override def transformOther (tree : Tree )(using Context ): Tree = tree match
166- case tree : Import =>
167- tree.foreachSubTree {
168- case t : RefTree => checkUndesiredProperties(t.symbol, t.srcPos)
169- case _ =>
170- }
171- tree
172- case _ => tree
173158
174159end CrossVersionChecks
175160
0 commit comments