Made vararg parameters have Array<out T> type

instead of simply Array<T>
  #KT-1638 Fixed
  #KT-2163 Fixed
  #KT-3213 Fixed
  #KT-4172 Fixed
  #KT-5534 Fixed
This commit is contained in:
Svetlana Isakova
2014-12-09 14:11:11 +03:00
parent d893e8283e
commit 5b4f10e698
42 changed files with 266 additions and 65 deletions
@@ -215,7 +215,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
alternativeVarargElementType = TypeTransformingVisitor.computeType(alternativeTypeElement, originalParamVarargElementType,
originalToAltTypeParameters, MEMBER_SIGNATURE_CONTRAVARIANT);
alternativeType = KotlinBuiltIns.getInstance().getArrayType(alternativeVarargElementType);
alternativeType = KotlinBuiltIns.getInstance().getArrayType(Variance.OUT_VARIANCE, alternativeVarargElementType);
}
Name altName = annotationValueParameter.getNameAsName();
@@ -50,6 +50,7 @@ import java.util.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName;
import static org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage.*;
import static org.jetbrains.jet.lang.types.Variance.INVARIANT;
import static org.jetbrains.jet.lang.types.Variance.OUT_VARIANCE;
public class SignaturesPropagationData {
@@ -368,6 +369,7 @@ public class SignaturesPropagationData {
}
KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance();
// todo simplify (with respect to platform types)
if (someSupersVararg && originalVarargElementType == null) {
// convert to vararg
@@ -393,10 +395,8 @@ public class SignaturesPropagationData {
}
// replace Array<Foo> with Array<out Foo>?
return new VarargCheckResult(TypeUtils.makeNullable(builtIns.getArrayType(Variance.OUT_VARIANCE, originalVarargElementType)),
false);
return new VarargCheckResult(TypeUtils.makeNullable(builtIns.getArrayType(OUT_VARIANCE, originalVarargElementType)), false);
}
return new VarargCheckResult(originalType, originalVarargElementType != null);
}