Skip to content

Commit c5430b0

Browse files
committed
Traverse the types to find undesired references
Undesired references can be to deprecated or experimental terms or types. Fixes #14034
1 parent 9913ee6 commit c5430b0

File tree

4 files changed

+41
-2
lines changed

4 files changed

+41
-2
lines changed

compiler/src/dotty/tools/backend/jvm/BTypesFromSymbols.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package jvm
55
import scala.tools.asm
66
import scala.annotation.threadUnsafe
77
import scala.collection.mutable
8-
import scala.collection.generic.Clearable
8+
import scala.collection.mutable.Clearable
99

1010
import dotty.tools.dotc.core.Flags._
1111
import dotty.tools.dotc.core.Contexts._

compiler/src/dotty/tools/dotc/typer/RefChecks.scala

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1339,7 +1339,20 @@ class RefChecks extends MiniPhase { thisPhase =>
13391339
}
13401340

13411341
override def transformTypeTree(tree: TypeTree)(using Context): TypeTree = {
1342-
checkExperimental(tree.symbol, tree.srcPos)
1342+
object CheckExperimental extends TypeTraverser {
1343+
def traverse(tp: Type): Unit =
1344+
tp match {
1345+
case tp: TypeRef =>
1346+
checkDeprecated(tp.symbol, tree.srcPos)
1347+
checkExperimental(tp.symbol, tree.srcPos)
1348+
case tp: TermRef =>
1349+
checkDeprecated(tp.symbol, tree.srcPos)
1350+
checkExperimental(tp.symbol, tree.srcPos)
1351+
case _ =>
1352+
traverseChildren(tp)
1353+
}
1354+
}
1355+
CheckExperimental.traverse(tree.tpe)
13431356
tree
13441357
}
13451358

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
@deprecated trait Exp
3+
@deprecated val exp = 1
4+
5+
def test1 = exp // error
6+
def test2(a: Exp) = () // error
7+
8+
type Foo0 = Exp // error
9+
type Foo = Option[Exp] // error
10+
type Bar = Option[exp.type] // error
11+
type Baz = Exp | Int // error
12+
type Quux = [X] =>> X match // error
13+
case Exp => Int
14+
type Quuz[A <: Exp] = Int // error
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import annotation.experimental
2+
3+
@experimental trait Exp
4+
@experimental val exp = 1
5+
6+
type Foo0 = Exp // error
7+
type Foo = Option[Exp] // error
8+
type Bar = Option[exp.type] // error
9+
type Baz = Exp | Int // error
10+
type Quux = [X] =>> X match // error
11+
case Exp => Int
12+
type Quuz[A <: Exp] = Int // error

0 commit comments

Comments
 (0)