Ignore redundant projections for declaration-site variance

This commit is contained in:
Denis Zharkov
2016-01-14 12:01:02 +03:00
parent 06d0a7c17c
commit 23d2b87a52
4 changed files with 31 additions and 11 deletions
@@ -692,17 +692,17 @@ public class JetTypeMapper {
@NotNull TypeMappingMode mode
) {
Variance projectionKind = projection.getProjectionKind();
if (mode.getSkipDeclarationSiteWildcards() && projectionKind == Variance.INVARIANT) {
return Variance.INVARIANT;
}
Variance parameterVariance = parameter.getVariance();
if (parameterVariance == Variance.INVARIANT) {
return projectionKind;
}
if (projectionKind == Variance.INVARIANT) {
if (mode.getSkipDeclarationSiteWildcards()) {
return Variance.INVARIANT;
}
if (projectionKind == Variance.INVARIANT || projectionKind == parameterVariance) {
if (mode.getSkipDeclarationSiteWildcardsIfPossible() && !projection.isStarProjection()) {
if (parameterVariance == Variance.OUT_VARIANCE && TypeMappingUtil.isMostPreciseCovariantArgument(projection.getType())){
return Variance.INVARIANT;
@@ -715,9 +715,6 @@ public class JetTypeMapper {
}
return parameterVariance;
}
if (parameterVariance == projectionKind) {
return parameterVariance;
}
// In<out X> = In<*>
// Out<in X> = Out<*>