@@ -65,6 +65,11 @@ object VarianceChecker {
6565 checkType(bounds.lo)
6666 checkType(bounds.hi)
6767 end checkLambda
68+
69+ private def varianceLabel (v : Variance ): String =
70+ if (v is Covariant ) " covariant"
71+ else if (v is Contravariant ) " contravariant"
72+ else " invariant"
6873}
6974
7075class VarianceChecker ()(implicit ctx : Context ) {
@@ -108,10 +113,10 @@ class VarianceChecker()(implicit ctx: Context) {
108113 if (relative == Bivariant ) None
109114 else {
110115 val required = compose(relative, this .variance)
111- def tvar_s = s " $tvar ( ${varianceString (tvar.flags)} ${tvar.showLocated}) "
116+ def tvar_s = s " $tvar ( ${varianceLabel (tvar.flags)} ${tvar.showLocated}) "
112117 def base_s = s " $base in ${base.owner}" + (if (base.owner.isClass) " " else " in " + base.owner.enclosingClass)
113- ctx.log(s " verifying $tvar_s is ${varianceString (required)} at $base_s" )
114- ctx.log(s " relative variance: ${varianceString (relative)}" )
118+ ctx.log(s " verifying $tvar_s is ${varianceLabel (required)} at $base_s" )
119+ ctx.log(s " relative variance: ${varianceLabel (relative)}" )
115120 ctx.log(s " current variance: ${this .variance}" )
116121 ctx.log(s " owner chain: ${base.ownersIterator.toList}" )
117122 if (tvar.isOneOf(required)) None
@@ -129,7 +134,7 @@ class VarianceChecker()(implicit ctx: Context) {
129134 else tp.normalized match {
130135 case tp : TypeRef =>
131136 val sym = tp.symbol
132- if (sym.variance != 0 && base.isContainedIn(sym.owner)) checkVarianceOfSymbol(sym)
137+ if (sym.isOneOf( VarianceFlags ) && base.isContainedIn(sym.owner)) checkVarianceOfSymbol(sym)
133138 else sym.info match {
134139 case MatchAlias (_) => foldOver(status, tp)
135140 case TypeAlias (alias) => this (status, alias)
@@ -160,7 +165,7 @@ class VarianceChecker()(implicit ctx: Context) {
160165 private object Traverser extends TreeTraverser {
161166 def checkVariance (sym : Symbol , pos : SourcePosition ) = Validator .validateDefinition(sym) match {
162167 case Some (VarianceError (tvar, required)) =>
163- def msg = i " ${varianceString (tvar.flags)} $tvar occurs in ${varianceString (required)} position in type ${sym.info} of $sym"
168+ def msg = i " ${varianceLabel (tvar.flags)} $tvar occurs in ${varianceLabel (required)} position in type ${sym.info} of $sym"
164169 if (ctx.scala2CompatMode &&
165170 (sym.owner.isConstructor || sym.ownersIterator.exists(_.isAllOf(ProtectedLocal ))))
166171 ctx.migrationWarning(
0 commit comments