diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-02-10 23:08:50 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-02-10 23:08:50 +0100 |
commit | b19e2535624de0907264a3c7710bf02b2fd0f952 (patch) | |
tree | 4cae516461e9df91cca7af8f4e793f40285fee43 /src | |
parent | aa18beccff3b2f2680575c02f30467be0a557f13 (diff) | |
parent | 4abf00c4f01c0047f42b0aa2e945ba57108593de (diff) | |
download | scala-b19e2535624de0907264a3c7710bf02b2fd0f952.tar.gz scala-b19e2535624de0907264a3c7710bf02b2fd0f952.tar.bz2 scala-b19e2535624de0907264a3c7710bf02b2fd0f952.zip |
Merge pull request #4955 from som-snytt/issue/8685-depr-case
SI-9650 Refchecks on case apply transform
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index cafea55b4d..9261d6b851 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -1154,11 +1154,13 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans def toConstructor(pos: Position, tpe: Type): Tree = { val rtpe = tpe.finalResultType assert(rtpe.typeSymbol hasFlag CASE, tpe) - localTyper.typedOperator { + val tree = localTyper.typedOperator { atPos(pos) { Select(New(TypeTree(rtpe)), rtpe.typeSymbol.primaryConstructor) } } + checkUndesiredProperties(rtpe.typeSymbol, tree.pos) + tree } override def transformStats(stats: List[Tree], exprOwner: Symbol): List[Tree] = { @@ -1529,11 +1531,20 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans !tree.tpe.resultType.typeSymbol.primaryConstructor.isLessAccessibleThan(tree.symbol) if (doTransform) { + def loop(t: Tree): Unit = t match { + case Ident(_) => + checkUndesiredProperties(t.symbol, t.pos) + case Select(qual, _) => + checkUndesiredProperties(t.symbol, t.pos) + loop(qual) + case _ => + } tree foreach { case i@Ident(_) => enterReference(i.pos, i.symbol) // SI-5390 need to `enterReference` for `a` in `a.B()` case _ => } + loop(tree) toConstructor(tree.pos, tree.tpe) } else { |