Don't check an argument type during passing it to vararg in the named form to avoid false positives if the argument type is type variable yet

^KT-41144 Fixed
This commit is contained in:
Victor Petukhov
2020-09-09 17:59:23 +03:00
parent 2c4c8cdf01
commit bcd33da6f8
14 changed files with 64 additions and 20 deletions
@@ -236,9 +236,12 @@ private fun arrayAssignmentToVarargInNamedFormInAnnotation(
): Boolean {
if (!languageVersionSettings.supportsFeature(LanguageFeature.AssigningArraysToVarargsInNamedFormInAnnotations)) return false
if (!isParameterOfAnnotation(parameterDescriptor)) return false
val isAllowedAssigningSingleElementsToVarargsInNamedForm =
!languageVersionSettings.supportsFeature(LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm)
return argument.isNamed() && parameterDescriptor.isVararg && isArrayOrArrayLiteral(argument, trace)
if (isAllowedAssigningSingleElementsToVarargsInNamedForm && !isArrayOrArrayLiteral(argument, trace)) return false
return isParameterOfAnnotation(parameterDescriptor) && argument.isNamed() && parameterDescriptor.isVararg
}
private fun arrayAssignmentToVarargInNamedFormInFunction(
@@ -249,7 +252,12 @@ private fun arrayAssignmentToVarargInNamedFormInFunction(
): Boolean {
if (!languageVersionSettings.supportsFeature(LanguageFeature.AllowAssigningArrayElementsToVarargsInNamedFormForFunctions)) return false
return argument.isNamed() && parameterDescriptor.isVararg && isArrayOrArrayLiteral(argument, trace)
val isAllowedAssigningSingleElementsToVarargsInNamedForm =
!languageVersionSettings.supportsFeature(LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm)
if (isAllowedAssigningSingleElementsToVarargsInNamedForm && !isArrayOrArrayLiteral(argument, trace)) return false
return argument.isNamed() && parameterDescriptor.isVararg
}
fun isArrayOrArrayLiteral(argument: ValueArgument, trace: BindingTrace): Boolean {