diff options
author | Paul Phillips <paulp@improving.org> | 2013-04-30 05:12:47 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-04-30 05:12:47 -0700 |
commit | 1fd4b7d2f435cf440f874ce99056bd1feeafa333 (patch) | |
tree | 9f81c799b6f413c2e09d6f7f80332dac351a19dd /src/compiler | |
parent | 3da1abe3a2e2752588ca8e2c7e889a321dae2037 (diff) | |
parent | d3aa9a7639c3c26b42a8faa9566d0d43a998b723 (diff) | |
download | scala-1fd4b7d2f435cf440f874ce99056bd1feeafa333.tar.gz scala-1fd4b7d2f435cf440f874ce99056bd1feeafa333.tar.bz2 scala-1fd4b7d2f435cf440f874ce99056bd1feeafa333.zip |
Merge pull request #2432 from retronym/ticket/delayed-init-ref
Warn on selection of vals from DelayedInit subclasses.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 7f8aeceeec..4933b8e0cb 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -1411,6 +1411,16 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans } } + private def checkDelayedInitSelect(qual: Tree, sym: Symbol, pos: Position) = { + def isLikelyUninitialized = ( + (sym.owner isSubClass DelayedInitClass) + && !qual.tpe.isInstanceOf[ThisType] + && sym.accessedOrSelf.isVal + ) + if (settings.lint.value && isLikelyUninitialized) + unit.warning(pos, s"Selecting ${sym} from ${sym.owner}, which extends scala.DelayedInit, is likely to yield an uninitialized value") + } + private def lessAccessible(otherSym: Symbol, memberSym: Symbol): Boolean = ( (otherSym != NoSymbol) && !otherSym.isProtected @@ -1610,6 +1620,7 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans if(settings.Xmigration.value != NoScalaVersion) checkMigration(sym, tree.pos) checkCompileTimeOnly(sym, tree.pos) + checkDelayedInitSelect(qual, sym, tree.pos) if (sym eq NoSymbol) { unit.warning(tree.pos, "Select node has NoSymbol! " + tree + " / " + tree.tpe) |