diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-02-02 13:18:00 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-02-04 01:46:46 +0100 |
commit | 81fa8316092e295c1a893b6fcf65568c11fffb58 (patch) | |
tree | 661be4a54455db15f1f5edc993f936dc312cb3da /test/scaladoc/run/SI-6812.scala | |
parent | 275b341545a3c4e633bd735cf45ccc1956a4233e (diff) | |
download | scala-81fa8316092e295c1a893b6fcf65568c11fffb58.tar.gz scala-81fa8316092e295c1a893b6fcf65568c11fffb58.tar.bz2 scala-81fa8316092e295c1a893b6fcf65568c11fffb58.zip |
Class symbols can't be contravariant.
During development of the fix for SI-6666, I encountered:
% test/files/pos/t4842.scala
test/files/pos/t4842.scala:10: error: contravariant class Bar occurs in covariant position in type ()this.Bar of constructor Bar
this(new { class Bar { println(Bar.this); new { println(Bar.this) } }; new Bar } ) // okay
I had incorrectly set the INCONSTRUCTOR flag on the class symbol
`Bar`. (It isn't directly in the self constructor call, as it
is nested an intervening anonymous class.)
But, this flag shares a slot with CONTRAVARIANT, and the variance
validation intepreted it as such.
ClassSymbol already has this code to resolve the ambiguous
flags for display purposes:
override def resolveOverloadedFlag(flag: Long) = flag match {
case INCONSTRUCTOR => "<inconstructor>" // INCONSTRUCTOR / CONTRAVARIANT / LABEL
case EXISTENTIAL => "<existential>" // EXISTENTIAL / MIXEDIN
case IMPLCLASS => "<implclass>" // IMPLCLASS / PRESUPER
case _ => super.resolveOverloadedFlag(flag)
}
This commit overrides `isContravariant` to reflect the same logic.
Diffstat (limited to 'test/scaladoc/run/SI-6812.scala')
0 files changed, 0 insertions, 0 deletions