summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-04-02 08:23:57 -0700
committerPaul Phillips <paulp@improving.org>2012-04-02 09:23:25 -0700
commit03f32bd22f85bf3a6f8824dbe4a7a989e717c071 (patch)
tree4befb2ee97185754d9db670494698c035aeea445 /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
parentf7535f72903f083b2444fb1d0b73363efa5482e9 (diff)
downloadscala-03f32bd22f85bf3a6f8824dbe4a7a989e717c071.tar.gz
scala-03f32bd22f85bf3a6f8824dbe4a7a989e717c071.tar.bz2
scala-03f32bd22f85bf3a6f8824dbe4a7a989e717c071.zip
Fix for SI-3272.
"References to the type parameters in object-private or object-protected values, variables, or methods (ยง5.2) of the class are not checked for their variance position." Review by @odersky.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 045614e773..54b711cebc 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -951,17 +951,20 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R
override def traverse(tree: Tree) {
tree match {
- case ClassDef(_, _, _, _) |
- TypeDef(_, _, _, _) =>
+ case ClassDef(_, _, _, _) | TypeDef(_, _, _, _) =>
validateVariance(tree.symbol)
super.traverse(tree)
// ModuleDefs need not be considered because they have been eliminated already
case ValDef(_, _, _, _) =>
- validateVariance(tree.symbol)
+ if (!tree.symbol.hasLocalFlag)
+ validateVariance(tree.symbol)
case DefDef(_, _, tparams, vparamss, _, _) =>
- validateVariance(tree.symbol)
- traverseTrees(tparams)
- traverseTreess(vparamss)
+ // No variance check for object-private/protected methods/values.
+ if (!tree.symbol.hasLocalFlag) {
+ validateVariance(tree.symbol)
+ traverseTrees(tparams)
+ traverseTreess(vparamss)
+ }
case Template(_, _, _) =>
super.traverse(tree)
case _ =>