@@ -65,6 +65,11 @@ object VarianceChecker {
65
65
checkType(bounds.lo)
66
66
checkType(bounds.hi)
67
67
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"
68
73
}
69
74
70
75
class VarianceChecker ()(implicit ctx : Context ) {
@@ -108,10 +113,10 @@ class VarianceChecker()(implicit ctx: Context) {
108
113
if (relative == Bivariant ) None
109
114
else {
110
115
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}) "
112
117
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)}" )
115
120
ctx.log(s " current variance: ${this .variance}" )
116
121
ctx.log(s " owner chain: ${base.ownersIterator.toList}" )
117
122
if (tvar.isOneOf(required)) None
@@ -129,7 +134,7 @@ class VarianceChecker()(implicit ctx: Context) {
129
134
else tp.normalized match {
130
135
case tp : TypeRef =>
131
136
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)
133
138
else sym.info match {
134
139
case MatchAlias (_) => foldOver(status, tp)
135
140
case TypeAlias (alias) => this (status, alias)
@@ -160,7 +165,7 @@ class VarianceChecker()(implicit ctx: Context) {
160
165
private object Traverser extends TreeTraverser {
161
166
def checkVariance (sym : Symbol , pos : SourcePosition ) = Validator .validateDefinition(sym) match {
162
167
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"
164
169
if (ctx.scala2CompatMode &&
165
170
(sym.owner.isConstructor || sym.ownersIterator.exists(_.isAllOf(ProtectedLocal ))))
166
171
ctx.migrationWarning(
0 commit comments