diff options
author | Paul Phillips <paulp@improving.org> | 2012-04-02 08:23:57 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-04-02 09:23:25 -0700 |
commit | 03f32bd22f85bf3a6f8824dbe4a7a989e717c071 (patch) | |
tree | 4befb2ee97185754d9db670494698c035aeea445 /src | |
parent | f7535f72903f083b2444fb1d0b73363efa5482e9 (diff) | |
download | scala-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')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 15 |
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 _ => |